我的一项工作涉及将几个字符串读入我的程序。我已经弄清楚了如何将字符串存储到一个字符串中,但是现在我需要逐行检索每个字符串。有什么建议么? 示例:
string s = "Hello
Welcome
Oranges
Bananas
Hi
Triangle"
我也不允许将它们存储到数组中;它们必须全部包含在一个字符串中。
答案 0 :(得分:1)
我可能会将字符串放入stringstream,然后使用类似std::getline
的东西一次从字符串流中读取一行。如果您真的担心执行速度,可以使用更快的方法,但这将是显而易见的首选,直到性能分析告诉您这是不允许的。
关于它的价值,可以在字符串中嵌入换行符,可以使用\n
,也可以切换为使用原始字符串文字:
string s = R"(Hello
Welcome
Oranges
Bananas
Hi
Triangle)";
使用原始字符串文字,嵌入的换行符(以及其他任何内容)成为字符串本身的一部分。在普通的字符串文字中,您必须改为使用\n
(如果您希望它是可移植的,那么无论如何)。
答案 1 :(得分:0)
要按原样呈现std::string
内容,请使用raw string literal。以下代码将从原始字符串文字中检索所有单行:
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
int main() {
std::string s = R"x(Hello
Welcome
Oranges
Bananas
Hi
Triangle (and hey, some extra stuff in the line with parenthesis)
)x";
std::istringstream iss(s);
std::vector<std::string> lines;
std::string line;
while(getline(iss,line)) {
lines.push_back(line);
}
for(const auto& line : lines) {
std::cout << line << '\n';
}
}
在线查看工作版本here。
使用先前的c ++ 11标准,您必须使用\
字符来避免换行符,如下所示:
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
int main() {
std::string s = "Hello \n\
Welcome \n\
Oranges \n\
Bananas \n\
Hi \n\
Triangle (and hey, some extra stuff in the line with parenthesis)";
std::istringstream iss(s);
std::vector<std::string> lines;
std::string line;
while(getline(iss,line)) {
lines.push_back(line);
}
for(std::vector<std::string>::const_iterator it = lines.begin(); it != lines.end(); ++it) {
std::cout << *it << '\n';
}
}
请参阅其他工作online example。