获得多行的字符串

时间:2012-02-13 09:19:52

标签: c++ string

这里我有一个被拆分的字符串,每行都在向量中的不同单元格中,如果前三个字母是 .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 时,我只能获得&#34; 1TLIS / PART / 123456789I / A / 1234RFGH67323&#34; 而不是 1TLIS / PART / 123456789I / A / 1234RFGH67323和&#34; AT0931 / 2DEC / GVA / Y&#34;

有没有办法可以检索从特定字符开始的所有行?

3 个答案:

答案 0 :(得分:2)

使用算法的另一种替代解决方案:

#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/"));

答案 1 :(得分:0)

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/"都会被覆盖,而您刚刚输出最后一个。

答案 2 :(得分:0)

你需要附加到str,目前你只是替换,尝试: 首先在for循环之前用“”初始化str,然后在for循环中初始化

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