【问题标题】:C++ ignore alphabetical characters when reading input from a fileC++ 从文件读取输入时忽略字母字符
【发布时间】:2017-09-18 06:48:09
【问题描述】:

我有一个程序从文本文件中获取输入流,该文件包含正整数,由空格分隔。该文件仅包含数字和一个 abc 实例,我的程序在继续从文件中读取数据之前应忽略它们。

这是我的代码,它不起作用

    int line;
    in >> line;
    in.ignore(1, 'abc');
    in.clear();

有人能具体说明问题是什么吗?本质上,我想丢弃 alpha 输入,清除 cin 并继续从文件中读取,但我得到一个无限循环。

【问题讨论】:

    标签: c++ io io-redirection


    【解决方案1】:

    这段代码应该可以工作

    我从输入流中得到三个部分,并将有用的部分放入 stringstream 并从中读取

    int part1, part2;
    std::string abc;
    in >> part1 >> abc >> part2;
    std::stringstream ss;
    ss << part1 << part2;
    int line;
    ss >> line 
    

    【讨论】:

      【解决方案2】:

      您可以通过这种方式明确忽略任何字母字符:

      #include <locale>
      #include <iostream>
      
      std::istream& read_number(std::istream& is, int& number) {
          auto& ctype = std::use_facet<std::ctype<char>>(is.getloc());
          while(ctype.is(std::ctype_base::alpha, is.peek())) is.ignore(1);
          return is >> number;
      }
      
      int main() {
        using std::string;
        using std::cin;
        using std::locale;
      
        int number;
        while(read_number(std::cin, number)) {
          std::cout << number << ' ';
        }
      }
      

      对于像“452abc def 23 11 -233b”这样的输入,这将产生“452 23 11 -233”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-27
        • 1970-01-01
        • 1970-01-01
        • 2018-04-04
        • 1970-01-01
        • 2012-10-29
        • 1970-01-01
        相关资源
        最近更新 更多