Как я могу разделить строку разделителем в массив? - PullRequest
8 голосов
/ 21 мая 2009

Я новичок в программировании. Я пытался написать функцию в C ++, которая разбивает содержимое строки в массив строк с заданным параметром, например:

string str = "___this_ is__ th_e str__ing we__ will use__";

должен возвращать строковый массив:

cout << stringArray[0]; // 'this'
cout << stringArray[1]; // ' is'
cout << stringArray[2]; // ' th'
cout << stringArray[3]; // 'e str'
cout << stringArray[4]; // 'ing we'
cout << stringArray[5]; // ' will use'

Я могу отлично разбить строку на строки, но самое сложное для меня - как я могу указать количество элементов в stringArray перед назначением ему текущей строки токена, а также как вернуть stringArray из функции.

Кто-нибудь покажет мне, как написать функцию?

Edit1: Мне не обязательно, чтобы результаты были в массиве строк, просто в любом контейнере, который я могу вызывать как обычную переменную с некоторой индексацией.

Ответы [ 12 ]

0 голосов
/ 13 августа 2010

Код ниже:

template <typename OutputIterator>
int explode(const string &s, const char c, OutputIterator output) {
    stringstream  data(s);
    string line;
    int i=0;
    while(std::getline(data,line,c)) { *output++ = line; i++; }
    return i;
}

int main(...) {
  string test="H:AMBV4:2:182.45:182.45:182.45:182.45:182.41:32:17700:3229365:201008121711:0";
  cout << test << endl; 
  vector<string> event;
**This is the main call**
  int evts = explode(test,':', back_inserter(event));
  for (int k=0; k<evts; k++) 
    cout << event[k] << "~";
  cout << endl;
}

Выходы

H:AMBV4:2:182.45:182.45:182.45:182.45:182.41:32:17700:3229365:201008121711:0
H~AMBV4~2~182.45~182.45~182.45~182.45~182.41~32~17700~3229365~201008121711~0~
0 голосов
/ 21 мая 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...