我需要从istream
读取一些字符串,其中有两种类型:
" strings with leading and trailing spaces "
应该看起来像"strings with leading and trailing spaces"
(只修剪前导和尾随空格,保留其中的内容)" John Doe \n Mary Smith"
。在这里我需要a)只读'\n'
和b)删除前导空格,同时保留尾随空格,这样我得到的字符串是"John Doe "
(请注意尾随空格仍在那里)。 / LI>
醇>
我对如何阅读该行并了解其中是否有更多'\n'
感到困惑。
答案 0 :(得分:1)
如果您在文本模式下打开流或使用基于文本的提取器,则无法看到行结尾。
要执行此操作,您必须以二进制模式打开流,然后使用read()而不是readline或>>进行读取。运算符。
答案 1 :(得分:1)
您可以使用std::getline
读取字符串,如果是多行,则留下尾随空格,如果没有,也删除它们:
#include <iostream>
#include <string>
#include <sstream>
int main()
{
//std::istringstream iss(" strings with leading and trailing spaces ");
std::istringstream iss(" John Doe \n Mary Smith");
std::string lines[2];
size_t i = 0;
bool keep_trailing_spaces = false;
while (std::getline(iss, lines[i++], '\n'))
{
if (i > 1)
{
keep_trailing_spaces = true;
break;
}
}
if (i > 1)
{
size_t start = lines[0].find_first_not_of(' ');
size_t count = keep_trailing_spaces ? std::string::npos : lines[0].find_last_not_of(' ') - start + 1;
std::cout << ">" << lines[0].substr(start, count) << "<" << std::endl;
}
return 0;
}
第一个结果:>strings with leading and trailing spaces<
第二个结果:>John Doe <