假设我有一个字符串,其中有多个回车符,即:
394968686
100630382个
395950966个
335666021
我仍然是C ++的业余时间,有人愿意告诉我你如何去解决:解析字符串中的每一行“?”所以我以后可以用它做一些事情(将所需的行添加到列表中)。我猜测在循环中使用Find(“\ n”)?
谢谢你们。
答案 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;时,解析后的令牌中不会包含任何空格。请参阅以下评论。