修改cin以返回换行符
Modify cin to also return the newlines
我知道getline()
,但如果遇到cin
时可以返回n
,那就太好了。
有什么方法可以实现这一点(或类似的)吗?
编辑(示例):
string s;
while(cin>>s){
if(s == "n")
cout<<"newline! ";
else
cout<<s<<" ";
}
输入文件txt:
hola, em dic pere
caram, jo també .
最终结果应该是:
hola, em dic pere newline! caram, jo també .
如果您正在读取单独的行,则您知道每个读取行之后都有一个换行符。好吧,除了文件中的最后一行,它不必用换行符分隔即可成功读取,但您可以通过检查eof()
来检测是否有换行符:如果std::getline()
成功,但设置了eof()
,则最后一行不包含换行符。显然,这需要使用std::getline()
:的std::string
版本
for (std::string line; std::getline(in, line); )
{
std::cout << line << (in.eof()? "": "n");
}
这应该在读取流时将其写入std::cout
。
这个问题要求输出数据,但换行符被转换为"换行符!"。您可以通过以下方式实现:
for (std::string line; std::getline(in, line); )
{
std::cout << line << (in.eof()? "": "newline! ");
}
如果您不关心流被拆分成行,但实际上只想获得整个文件(包括所有换行符),那么您可以将流读取到std::string
:
std::string file((std::istreambuf_iterator<char>(in)),
std::istreambuf_iterator<char>());
然而,请注意,这种确切的方法可能相当慢(尽管我知道它可以变得很快)。如果您知道文件不包含某个字符,也可以使用std::getline()
将整个文件读取到std::string
:中
std::getline(in, file, 0);
上面的代码假设您的文件不包含任何空字符。
修改@Dietmar的答案就可以了:
for (std::string line; std::getline(in, line); )
{
std::istringstream iss(line);
for (std::string word; iss >> word; ) { std::cout << word << " "; }
if (in.eof()) { std::cout << "newline! "; }
}
为了记录在案,我最终使用了这个(我想在11小时前发布它)
string s0, s1;
while(getline(cin,s0)){
istringstream is(s0);
while(is>>s1){
cout<<s1<<" ";
}
cout<<"newline! ";
}
相关文章:
- 如何防止clang格式在流运算符调用之间添加换行符<<
- C/C++ - 查询平台相关的换行符(用于内存映射文件)
- 在 Stream C++ 文本之前有一个额外的换行符
- 流:CSV 文件中的换行符
- 如何在三元条件运算符中添加换行符和连接? :在 C++ 中
- Clang-格式:在多行语句之后的换行符上打开大括号
- 在输出流中插入换行符
- 防止控制台在通道字符(在 c++ 中)中输入空格(即空格、制表符和换行符)
- QProcess::readAllStandardOutput() 和换行符
- 如果有换行符,clang 格式不会附加大括号
- 提取后返回换行符的C++istream.get()
- 如何在出现换行符之前将多个整数作为输入?
- 正则表达式 获取两个换行符之间的文本
- 为什么 std::cout 在我的输出中添加返回或换行符
- 当子字符串只是一个换行符时,string.find(substring) 函数返回什么
- 为什么 fstream::tellg() 返回值会因输入文本文件中的换行符数而增大,当文件针对 Windows (r
- 返回Rcpp中size_t的换行符
- 修改cin以返回换行符
- 用cin处理空格并返回(换行符)
- Boost::asio::async_read返回文件结束错误的换行符