расщепление строки String в C ++ - PullRequest
0 голосов
/ 09 мая 2011

у меня есть функция MakeElementfromString( string k ){} Я хочу разделить строку и сделать struct element{int nr, string s} с ней. что я могу использовать сделать это? нашел strtok, но не смог его использовать или, может быть, я не знаю как, потому что это для char и некоторого stringstream метода ... у меня ничего не получалось Кто-нибудь может подсказать мне идею? Я не эксперт в C ++, так что объясните :) спасибо

Ответы [ 3 ]

1 голос
/ 09 мая 2011

Если вы можете использовать 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));
}
0 голосов
/ 10 мая 2011

спасибо за помощь сделал это за

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;
}
0 голосов
/ 09 мая 2011

На момент написания этой статьи вопрос не редактировался, чтобы сказать, как ОП хочет, чтобы строка была преобразована в элемент структуры. Но это общая схема того, как это можно сделать.

Допущения: строка s имеет первые два символа, которые входят в член 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;
};  
...