Разбор строки с помощью разделителя в C ++ - PullRequest
0 голосов
/ 27 августа 2011

Хорошо, мне нужно проанализировать некоторую информацию, и я хотел бы знать, как лучше всего это сделать.Итак, вот строка, которую мне нужно проанализировать.Разделитель - это «^»

John Doe^Male^20

Мне нужно разобрать строку по переменным имени, пола и возраста.Что было бы лучшим способом сделать это в C ++?Я думал о цикле и установил условие на while(!string.empty(), а затем назначил все символы вплоть до '^' в строке, а затем удалил то, что я уже назначил.Есть ли лучший способ сделать это?

Ответы [ 4 ]

2 голосов
/ 27 августа 2011

Вы можете использовать getline в потоке C ++.

istream & getline (istream & is, string & str, char delimiter = '\ n')

изменить разделитель на '^'

1 голос
/ 27 августа 2011

У вас есть несколько вариантов.Если вы можете использовать boost, вы можете использовать еще один хороший вариант - алгоритм разбиения, который они предоставляют в своей библиотеке строк.Вы можете проверить этот вопрос, чтобы увидеть ответ повышения в действии: Как разбить строку в c

Если вы не можете использовать повышение, вы можете использовать string::find, чтобы получить индексперсонажа:

string str = "John Doe^Male^20";

int last = 0;
int cPos = -1;
while ((cPos = str.find('^', cPos + 1)) != string::npos)
{
   string sub = str.substr(last, cPos - last);

   // Do something with the string

   last = cPos + 1;
}
0 голосов
/ 27 августа 2011

У вас есть несколько вариантов, но я бы сам использовал strtok(). Это сделало бы это недолгим.

0 голосов
/ 27 августа 2011
#include <stdio.h>

#include <string.h>

int main ()

{

  char str[] = "This is a sample string";

  char * pch;

  printf ("Looking for the 's' character in \"%s\"...\n",str);

  pch=strchr(str,'s');

  while (pch!=NULL)

  {

    printf ("found at %d\n",pch-str+1);

    pch=strchr(pch+1,'s');

  }

  return 0;

}

Сделайте что-то подобное в массиве.

...