我只想警告你不要使用 Sean Genge 撰写的类似
文章 中的代码。我不知道如何正确地写,因为论坛关闭了,我无法在上面发表评论。
总的来说,可以使用 STL 和 C++ 非常轻松地分割字符串。你可以在 STL 中找到两个不同的 'getline' 函数。一个来自 std::iostream,需要 char 缓冲区,并且不太方便;另一个是 std::string 中的公共函数,允许定义终止字符。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
#include <string>
#include <iostream>
#include <sstream>
int main(int argc, char** arv)
{
// initialize input stream with data
std::istringstream ins("this is a text");
// load words to this container
std::string out;
// read the words until some data in the input stream
while (ins.good())
{
getline(ins, out, ' '); // tell getline to stop on ' ' character
if (!out.empty()) // just fast way to remove unnecessary spaces
std::cout << out << std::endl;
}
return 0;
}
|
另一种方法是仅使用 ANSI。稍微危险一点,但会更快。使用 'strtok' 函数。在术语中:单词就是标记。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
#include <stdio.h>
#include <string.h>
int main(int argc, char** argv)
{
// this function will stop on any of these characters
char const delimiters[] = " \t\n\r";
// initial string to split
char ins[] = "this is a text";
// this pointer will point to the next word after every 'strtok' call
char *tok = strtok(ins, delimiters);
// if returned pointer is NULL, then there is no more words
while (0 != tok)
{
puts(tok); // print the word
tok = strtok(NULL, delimiters); // move to the next one
}
return 0;
}
|
两个程序都将返回
可以使用类似 sscanf 的函数将字符串分割成几部分,但为此你必须知道项目的类型,有时还需要知道它们的数量。不要发明别人已经完成并且被证明稳定的代码。祝你好运