加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 输入迭代器跳过空格,以任何方式防止这种跳过

发布时间:2020-12-16 05:49:35 所属栏目:百科 来源:网络整理
导读:我正在从一个文件读取一个字符串,直到我达到一个分隔字符,美元符号.但输入迭代器正在跳过空格,因此创建的字符串没有空格.在这种情况下不是我想要的.有没有办法阻止跳绳行为?如果是这样怎么样? 这是我的测试代码. #include iostream#include fstream#includ
我正在从一个文件读取一个字符串,直到我达到一个分隔字符,美元符号.但输入迭代器正在跳过空格,因此创建的字符串没有空格.在这种情况下不是我想要的.有没有办法阻止跳绳行为?如果是这样怎么样?

这是我的测试代码.

#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 constructors

explicit basic_ios(basic_streambuf<charT,traits>* sb);

Effects: Constructs an object of class basic_ios,assigning initial values to its member objects by calling init(sb).

basic_ios();

Effects: Constructs an object of class basic_ios (27.5.2.7) leaving its member objects uninitialized.
The object shall be initialized by calling its init member function. If it is destroyed before it has been
initialized the behavior is undefined.

[…]

void init(basic_streambuf<charT,traits>* sb);

Postconditions: The postconditions of this function are indicated in Table 118.

06001

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读