所以我有字符串:
string message = "Hello\nHow are you?\nGood!"
我想把它一行一行的格式:
string line = ""; for (getline(message, line)) { // do something with the line }
如何实现这一点?getline是否会被使用并不重要。我尝试按\n拆分字符串,但无法使用for循环
getline
\n
a6b3iqyw1#
getline需要一个输入流才能工作,幸运的是,我们有std::stringstream,您可以从名称中看出它是一个字符串流。
std::stringstream
std::string line; std::stringstream ss(message); while(getline(ss, line)) { // do something with the line }
cl25kdpy2#
使用c++20范围,您可以在拆分视图上循环执行此操作:
for (auto line_view : std::ranges::split_view(message, "\n")) { std::string_view line{line_view.begin(), line_view.end()}; // do something with the line }
Demo这可以避免对原始字符串和每一行制作多个副本,根据字符串的大小,这可能值得额外的复杂性。
2条答案
按热度按时间a6b3iqyw1#
getline
需要一个输入流才能工作,幸运的是,我们有std::stringstream
,您可以从名称中看出它是一个字符串流。cl25kdpy2#
使用c++20范围,您可以在拆分视图上循环执行此操作:
Demo
这可以避免对原始字符串和每一行制作多个副本,根据字符串的大小,这可能值得额外的复杂性。