什么是基于特定分隔符拆分字符串的最有效的C ++方法,类似于python中的split方法?

时间:2014-06-20 12:46:42

标签: c++ string split

getline(cin,s);
istringstream iss(s);
do
{
    string sub;
    iss>>sub;
    q.insert(sub);
 }while(iss);

当问题想让我在空间的基础上分裂时,我使用了这种技术,所以任何人都可以解释如何在有一个特定的分隔符时分割,如';'或':'。

有人告诉我有关strtok的功能,但我无法得到它的用法,所以如果有人可以提供帮助会很好。

2 个答案:

答案 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(),这些问题无法解决。