getline(cin,s);
istringstream iss(s);
do
{
string sub;
iss>>sub;
q.insert(sub);
}while(iss);
当问题想让我在空间的基础上分裂时,我使用了这种技术,所以任何人都可以解释如何在有一个特定的分隔符时分割,如';'或':'。
有人告诉我有关strtok的功能,但我无法得到它的用法,所以如果有人可以提供帮助会很好。
答案 0 :(得分:12)
首先,不要使用strtok
。如初。
标准库中没有真正的功能。 我用的是:
std::vector<std::string>
split( std::string const& original, char separator )
{
std::vector<std::string> results;
std::string::const_iterator start = original.begin();
std::string::const_iterator end = original.end();
std::string::const_iterator next = std::find( start, end, separator );
while ( next != end ) {
results.push_back( std::string( start, next ) );
start = next + 1;
next = std::find( start, end, separator );
}
results.push_back( std::string( start, next ) );
return results;
}
我相信Boost有很多这样的功能。 (我实施了 我的大部分时间早在Boost之前。)
答案 1 :(得分:1)
我在谷歌上输入Split C++。搜索时间:0.5秒
...
从链接中
strtok()这是旧的C库函数。有广泛的 稍后的FAQ中的概述。以下是使用它的示例。
/* This is C code */
#include <stdio.h>
#include <string.h>
int main()
{
char s[] = "one, two,, four , five,"; /* mutable! */
const char* p;
for (p = strtok( s, "," ); p; p = strtok( NULL, "," ))
{
printf( "\"%s\"\n", p );
}
return 0;
}
注意strtok()太愚蠢了,不能将相邻的分隔符视为一个 空场?它最后错过了空场!
如果使用strtok(),这些问题无法解决。