我正在从一个文件中读取一个字符串,直到我达到一个分隔字符,即美元符号。但输入迭代器正在跳过空格,因此创建的字符串没有空格。在这种情况下不是我想要的。有没有办法阻止跳绳行为?如果是这样的话?
这是我的测试代码。
#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;
}
答案 0 :(得分:12)
因为默认情况下将流配置为跳过空格,所以请使用
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)