【问题标题】:How to read only chars from ifstream and ignore numbers in c++?如何从 ifstream 中只读取字符并忽略 C++ 中的数字?
【发布时间】:2016-09-09 18:43:30
【问题描述】:

所以我有一个包含数字和一堆字符的文件,我想将它们存储在我自己的数据类型中,我称之为 Grid,它基本上是一个二维向量,具有一些有用的功能,可以让我继续存储数据不用担心其他任何事情。无论如何,这里是输入文件的外观示例:

---sa-fs-gäörq-qwe-f-s

--p21-2

4-----

我希望能够逐个字符地读取所有这些数据并将它们存储在我的向量中,除非我希望能够忽略这些数字。这是我所做的一些事情

int main()
{
    ifstream file;
    file.open("input.txt");
    Grid<char>g(5,5) //initializing 2d vector 5x5
    while(!file.eof())
    {
        for (int i=0; i<5;i++)
             for(int j=0; i<5;j++)
                 file>>(g[i][j]);
    }
 return 0;

}

【问题讨论】:

  • @BaummitAugen 很抱歉,但我找不到我的问题与链接中的问题之间的任何相关性,你能帮我吗?
  • 这不应该回答这个问题,而是指出你的代码中一个不相关的错误。这就是为什么我将其发布为评论而不是答案。 ;)

标签: c++ iostream fstream


【解决方案1】:
char c;
while( file >> c ) {

    if( !isdigit( c ) ) {
//  if( ( c >= 'A' && C <= 'Z' ) || ( c >= 'a' && c <= 'z' ) ) {

        // do stuff with c
    }


}

或者更习惯一点,使用isalpha。这可能取决于您的 C++ 环境的语言环境设置。理想情况下,您应该使用一个好的 Unicode 库,除非您可以保证您的输入文件。

【讨论】:

  • @IvanRubinson 请详细说明。如果是关于性能,我的代码假定文件流是缓冲的。
  • 我知道@baum mit augen 已经将我链接到与我要问的问题相关的答案,但为什么不使用while(! file.eof())
  • 问题是关于忽略数字。我们为什么不这样做if( ! (c &gt; '0' &amp;&amp; c &lt; '9') ) { /*code*/ }。这应该在不使用 Unicode 库的情况下处理其他 Unicode 字符。 @戴
  • @Leowahyd,您询问file.eof() 的评论听起来像是一个与此问题没有真正关系的新问题……您需要重新开始提问过程。 (不过,您不应该实际发布新问题。作为提问过程的一部分,您应该在其他地方找到答案。)
  • @Leowahyd 没必要问这个问题。它将立即被轰炸并关闭,这是一个以前很好回答的问题。简短的版本是您检查是否已到达文件 BEFORE 的末尾。确定是否到达文件末尾的唯一方法是读取文件末尾。换句话说,您需要在读取 AFTER 之前测试 EOF,但在使用您读取的内容之前,以防您没有读取任何内容。事实上,最好在使用您阅读的内容之前测试所有失败,因为可能发生的不仅仅是到达文件末尾。
猜你喜欢
  • 2012-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-15
相关资源
最近更新 更多