Получение строк, которые состоят из нескольких строк - PullRequest
0 голосов
/ 13 февраля 2012

Здесь у меня есть строка, которая разбита, и каждая строка находится в отдельной ячейке в векторе, и я хочу получить всю строку, если первые три буквы .N / , однако кажется, чтоя могу получить только одну из строк, которые начинаются с .N / ниже - это строка, с которой я работаю.

std::string message = ".N/1TLIS/PART/123456789I/A/1234RFGH67323\n"
    ".N/AT0931/2DEC/GVA/Y\n"
    ".I/KL0967/02APR/AMS/F\n"
    ".O/123/MARRIOTT/27MAY/084512L//FEDEXVAN45\n";

КОД, КОТОРЫЙ Я ИСПОЛЬЗУЮ НА МОМЕНТЕ

std::vector<std::string> el; //VECTOR
    split(el,message,boost::is_any_of("\n"));// the string above is split line for line into vector el

 for(int i = 0; i < el.size(); i++)
     {
         if(el[i].substr(0,3) == ".N/")
         {

             str = el[i].substr(3);

         }
     }
     cout << str;

Однако, когда я распечатываю str , я получаю только "1TLIS / PART / 123456789I / A / 1234RFGH67323" , а не 1TLIS /PART / 123456789I / A / 1234RFGH67323 и "AT0931 / 2DEC / GVA / Y"

Есть ли способ получить все строки, начинающиеся с определенного символа?

Ответы [ 3 ]

2 голосов
/ 13 февраля 2012

Другое альтернативное решение с использованием алгоритмов:

#include <algorithm>
#include <boost/algorithm/string.hpp>
#include <boost/bind.hpp>

using namespace std;

ostream_iterator<string> out_it(cout, "\n");

remove_copy_if(el.begin(), el.end(), out_it, 
    !boost::bind(boost::algorithm::starts_with<string, string>, _1, ".N/"));
0 голосов
/ 13 февраля 2012

Вам нужно добавить к str, в настоящее время вы просто заменяете, попробуйте: сначала инициализируйте str с помощью "" перед циклом for, затем внутри цикла for

str.append(el[i].substr(3));
0 голосов
/ 13 февраля 2012
for(int i = 0; i < el.size(); i++)
{
    if(el[i].substr(0,3) == ".N/")
    {

        str = el[i].substr(3);
        cout << str << endl;
    }
}

str перезаписывается каждый раз, когда вы находите ".N/", и вы только что превзошли последний.

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