你好我想知道如何用strtok
标记一个std字符串string line = "hello, world, bye";
char * pch = strtok(line.c_str(),",");
我收到以下错误
error: invalid conversion from ‘const char*’ to ‘char*’
error: initializing argument 1 of ‘char* strtok(char*, const char*)’
我正在寻找一种快速简便的方法,因为我认为它不需要太多时间
答案 0 :(得分:14)
我总是使用getline
来执行此类任务。
istringstream is(line);
string part;
while (getline(is, part, ','))
cout << part << endl;
答案 1 :(得分:9)
std::string::size_type pos = line.find_first_of(',');
std::string token = line.substr(0, pos);
要查找下一个标记,请重复find_first_of
,但从pos + 1
开始。
答案 2 :(得分:3)
您可以通过strtok
使用&*line.begin()
来获取指向char
缓冲区的非常量指针。我通常喜欢在C ++中使用boost::algorithm::split
。
答案 3 :(得分:1)
strtok
是一个相当古怪,邪恶的函数,它修改了它的论点。这意味着你不能直接在std::string
的内容上使用它,因为无法从该类获得指向可变的,以零结尾的字符数组的指针。
您可以处理字符串数据的副本:
std::vector<char> buffer(line.c_str(), line.c_str()+line.size()+1);
char * pch = strtok(&buffer[0], ",");
或者,对于更多的C ++习语,您可以使用字符串流:
std::stringstream ss(line);
std::string token;
std::readline(ss, token, ',');
或更直接地找到逗号:
std::string token(line, 0, line.find(','));