crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Парсить string с использованием разделителя.
Dima2387
  опции профиля:
сообщение 6.11.2015, 12:48
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 19
Регистрация: 31.1.2013
Пользователь №: 3696

Спасибо сказали: 0 раз(а)




Репутация:   0  


Привет. Имею нужду парсить строку вида

node1;node2;node3;node4
a1=node1;
a2=node2;
a3=node3;
a4=node4;
нужно распаршивать строку учитывая что разделитель ; Нашел вот такой кусочек чуть модифицировал под себя однако проблема в следующем - если в одном из блоков будет пробел, данные в переменную запишутся только до первого пробела в блоке :(

std::string socket_parsing(std::string &s) {
//   std::string str = "ФИО String; Дата_рождения Date; Кол-во Integer; Рейтинг Float";
    std::string nickname;

//    std::vector<std::string> types;
   std::vector<std::string> titles;
   const std::string delimeters = ";";
   for (std::string::iterator iter = s.begin(); iter != s.end(); ++iter)
   {
      if (delimeters.find(*iter) != std::string::npos)
      {
         *iter = '\n';
      }
   }
   std::istringstream ist(s);
   while (std::getline(ist, s))
   {
      std::istringstream tmp(s);
      std::string type;
      std::string title;
      tmp >> title >> type;
//      types.push_back(type);
      titles.push_back(title);
   }
   int i=1;
   for (std::vector<std::string>::iterator ti_iter = titles.begin();
        ;++ti_iter, i++)
   {

      if ( i == 1 )
      std::cout<<*ti_iter<<" nickname \n";

       if ( i == 2 )
       std::cout<<*ti_iter<<" message \n";

   }
return s;
}


Если у кого есть время помочь буду благодарен)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Влад
  опции профиля:
сообщение 6.11.2015, 15:03
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 146
Регистрация: 20.3.2009
Из: Санкт-Петербург
Пользователь №: 627

Спасибо сказали: 46 раз(а)




Репутация:   8  


vector<string> tokenize(const string& str, const string& delimiters = " ")
{
    vector<string> result;

    string::size_type lastPos = str.find_first_not_of(delimiters, 0);
    string::size_type pos = str.find_first_of(delimiters, lastPos);

    while (string::npos != pos || string::npos != lastPos)
    {
        result.push_back(str.substr(lastPos, pos - lastPos));
        lastPos = str.find_first_not_of(delimiters, pos);
        pos = str.find_first_of(delimiters, lastPos);
    }
    return result;
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.11.2024, 4:42