2010-11-12 82 views
5

可能重复在C/C++的行:
How do I tokenize a string in C++?分裂使用空格作为定界符

伪代码:

Attributes[] = Split line(' ') 

如何?

我一直在做这样的:

char *pch; 
    pch = strtok(line," "); 
    while(pch!=NULL) 
    { 
     fputs (pch, stdout); 


    } 

,并得到一个非书面,卡住,退出文件。这有什么问题吗? 嗯,这个东西甚至不符合我的伪代码要求,但是我对如何将索引(作为字符数组)索引到我的数组感到困惑,我想我应该写一个2-dim数组?

+3

解决方案是不同的。 – dreamlax 2010-11-12 23:47:11

+17

如何从下面的一些例子:http://www.codeproject.com/KB/recipes/Tokenizer.aspx他们是非常有效的,有点优雅。字符串工具包库使得C++中的复杂字符串处理变得简单和容易。 – 2010-12-08 05:28:17

回答

5

这不是一个重复 - C++看@zunino所接受的答案here

下面的基本代码,但看到你将不得不点击它的答案的全部光荣优雅。

#include <iostream> 
#include <string> 
#include <sstream> 
#include <algorithm> 
#include <iterator> 

int main() { 
    using namespace std; 
    string sentence = "Something in the way she moves..."; 
    istringstream iss(sentence); 
    copy(istream_iterator<string>(iss), 
      istream_iterator<string>(), 
      ostream_iterator<string>(cout, "\n")); 
} 

这取决于一个事实,即在默认情况下,istream_iterator对待空格作为分隔符。生成的标记将写入cout,分隔线(每个在构造函数过载中指定的分隔符ostream_iterator)。

+0

我用过这个,谢谢。 – andandandand 2010-11-14 17:12:06

8

使用strtok" "作为分隔符。

+0

这对C来说很好,因为C++在我的答案中看到了相关的问题。 – 2010-11-12 23:46:41

1

的最简单的方法是boost::split:这取决于您是否使用C或C++

std::vector<std::string> words; 
boost::split(words, your_string, boost::is_space());