在c ++中拆分字符串String

时间:2011-05-09 12:06:05

标签: c++ string split

我有一个功能MakeElementfromString( string k ){} 我想拆分字符串并使用它struct element{int nr, string s}。 我能用什么做呢?发现strtok但是无法使用它或者我不知道为什么因为char和某些stringstream方法...对我来说没有用  谁能告诉我一个想法?我不是c ++的专家所以解释一下:)  谢谢

3 个答案:

答案 0 :(得分:1)

如果你可以使用libs,请使用boost :: split。

如果您无法迭代字符串并将部件放在矢量中。

string s("test hallo! someothertest");
char separator = ' ';
vector<string> parts;
int token_begin = 0;
for(int i = 0; i < s.size(); ++i){
  if( s[i] == separator){
     parts.push_back(s.substr(token_begin, i - token_begin ));
     token_begin = i + 1;
  }
}

//get last token if does not end with a separator
if(token_begin != s.size()){
  parts.push_back(s.substr(token_begin, s.size() - token_begin));
}

答案 1 :(得分:0)

在撰写本文时,尚未编辑该问题以说明OP如何将字符串转换为struct元素。但这是如何做到这一点的大致轮廓。

假设:字符串s前两个字符进入struct的int成员,其余字符进入字符串部分。

例子:s = 01hello
伪代码:

string num = s.substr(0, 2);  
string rest = s.substr(3);  

element e;
e.setVal(num, rest);

setVal(string n, string m) {
  str = m;
  istringstream buffer(n);
  buffer >> num;
}

原始结构是:

struct element {
 int nr;
 string str;
};  

答案 2 :(得分:0)

谢谢你的帮助

struct Telem {
int nrte;
string s;
int dims;
};

我需要从文件中读取一行,并将该行转换为我的欲望元素,希望它可以帮助其他人解决类似的问题

Telem TelemDinString( string k )
{
    Telem a;
    Init(a);

    string buf;
    stringstream ss(k);
    vector<string> tokens;
    while ( ss >> buf )
        tokens.push_back(buf);
    int nr;

    stringstream convert( tokens[0] );
    if ( !( convert >> nr ) )
        nr=-1;
    a.nrte = nr;
    a.s = tokens[1];
    a.dims=a.s.length();

return a;
}