首页 > 解决方案 > 逐个字符读取文件并使用测试

问题描述

我正在尝试从文件中读取并保留总共有多少个大写字母,然后输出文件中大写字母的数量。我正在尝试逐字符读取文件,当遇到大写字母时,将其存储在变量中,例如:char,然后在变量中输出总数,但是当我去运行我的代码时,我不断得到被多次输出的文件的第一个大写字母。

我尝试在循环中使用 (isupper(character)) 来跟踪每个大写字母,但是每当我运行我的代码时,我都会输出一个倒置的问号。我试着把循环拿出来看看我是否至少可以让 isupper 计算第一个大写字母并输出“1”。这是我看到输出文件的第一个小写字母的时候。在我尝试 isupper 之前,我确保我至少可以完整地输出我的文件,这是我能够做到的。

#include <iostream>
#include <fstream>
#include <cctype>
using namespace std;

int main()
{
  ifstream inputFile;
  inputFile.open("text.txt");

  if (!inputFile)
  {
    cerr << "Unable to open file text.txt";
    exit(1); // call system to stop
  }

  if (inputFile.is_open())
  {
    char character=0;
    int total = 0;

    inputFile.get(character);

    while (inputFile)
    {
        while (isupper(character))

        inputFile >> character;
        total += character;
        cout << character;
    }


    inputFile.close();
  }



  return 0;
}

当我使用 isupper 时,我得到多次输出的文件的第一个小写字母,当我使用 islower 时,我得到文件的第一个大写字母。我应该看到 isupper 的大写字母总计和 islower 的小写字母总计。

标签: c++filecharacter

解决方案


您不需要内部while循环。您需要的只是一个if (isupper(character))语句,只要下一个字符为大写,就会增加计数器。另一个问题是你增加了total字符的 ASCII 码的值。

试试这个:

    while (inputFile)
    {
        if (isupper(character))
        {
            ++total;
            cout << character;
        }

        inputFile >> character;
    }
    cout << total;

顺便说一句,由于格式不正确,您的程序会产生误导。如果您更正格式,您可能会发现问题:

        while (inputFile)
        {
            while (isupper(character))
                inputFile >> character;
            total += character;
            cout << character;
        }

推荐阅读