我正在从文件读入字符串,直到到达分隔字符(美元符号)。但输入迭代器会跳过空格,因此创建的字符串没有空格。在这种情况下不是我想要的。有什么办法可以阻止跳过行为吗?如果是这样怎么办?
这是我的测试代码。
#include <iostream>
#include <fstream>
#include <iterator>
#include <string>
// istream iterator is skipping whitespace. How do I get all chars?
void readTo(std::istream_iterator<char> iit,
std::string& replaced)
{
while(iit != std::istream_iterator<char>()) {
char ch = *iit++;
if(ch != '$')
replaced.push_back(ch);
else
break;
}
}
int main() {
std::ifstream strm("test.txt");
std::string s;
if(strm.good()) {
readTo(strm, s);
std::cout << s << std::endl;
}
return 0;
}
由于流默认配置为跳过空格,因此,使用
noskipws(strm);
标准:
basic_ios 构造函数
explicit basic_ios(basic_streambuf<charT,traits>* sb);
作用:构造一个basic_ios类的对象,通过调用为其成员对象赋值初始值init(sb).
basic_ios();
作用:构造一个类的对象basic_ios
(27.5.2.7) 使其成员对象未初始化。
该对象应通过调用其初始化init
成员函数。如果它在被破坏之前就被破坏了
初始化的行为是未定义的。
[...]
void init(basic_streambuf<charT,traits>* sb);
后置条件:该函数的后置条件如表 118 所示。
+----------+-------------+
| ... | ... |
| flags() | skipws|dec |
| ... | ... |
+----------+-------------+
(Table 118)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)