CString解析回车

时间:2011-08-12 16:21:20

标签: c++ parsing mfc cstring

假设我有一个字符串,其中有多个回车符,即:

394968686
100630382个
395950966个
335666021

我仍然是C ++的业余时间,有人愿意告诉我你如何去解决:解析字符串中的每一行“?”所以我以后可以用它做一些事情(将所需的行添加到列表中)。我猜测在循环中使用Find(“\ n”)?

谢谢你们。

4 个答案:

答案 0 :(得分:1)

你可以尝试使用stringstream。请注意,您可以重载getline方法以使用您想要的任何分隔符。

string line;
stringstream ss;
ss << yourstring;
while ( getline(ss, line, '\n') )
{
  cout << line << endl;
}

或者你可以使用boost库的tokenizer类。

答案 1 :(得分:1)

while (!str.IsEmpty())
{
    CString one_line = str.SpanExcluding(_T("\r\n"));
    // do something with one_line
    str = str.Right(str.GetLength() - one_line.GetLength()).TrimLeft(_T("\r\n"));
}

此代码将删除空白行,但必要时可以轻松纠正。

答案 2 :(得分:0)

如果您的字符串存储在c样式字符*或std::string中,那么您只需搜索\n

std::string s;
size_t pos = s.find('\n');

您可以使用string::substr()获取子字符串并将其存储在列表中。伪代码,

std::string s = " .... ";
for(size_t pos, begin = 0; 
    string::npos != (pos = s.find('\n'));
    begin = ++ pos)
{
  list.push_back(s.substr(begin, pos));
}

答案 3 :(得分:0)

您可以在C ++中使用stringstream类。

#include <iostream>
#include <sstream>
#include <vector>
using namespace std;

int main()
{
   string str = "\
                394968686\
                100630382\
                395950966\
                335666021";
   stringstream ss(str);
   vector<string> v;

   string token;
   // get line by line
   while (ss >> token)
   {
      // insert current line into a std::vector
      v.push_back(token);
      // print out current line
      cout << token << endl;
   }
}

Output of the program above:

394968686
100630382
395950966
335666021

请注意,使用运算符&gt;&gt;时,解析后的令牌中不会包含任何空格。请参阅以下评论。