c++ - 逐个字符读取文件并使用测试
问题描述
我正在尝试从文件中读取并保留总共有多少个大写字母,然后输出文件中大写字母的数量。我正在尝试逐字符读取文件,当遇到大写字母时,将其存储在变量中,例如: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 的小写字母总计。
解决方案
您不需要内部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;
}
推荐阅读
- wordpress - Wordpress - 如何在社交分享中添加自定义文本和链接?
- javascript - 在一个循环中抓取接下来的 N 个项目
- python - Pytorch 中两个类的一个热编码
- python - 叶问题jupyter笔记本:它没有在地图上显示颜色
- java - 如何让我的 JButton 计数并更改我的显示?
- mdx - 使用 mdx 计算计算最近 12 周的平均值
- node.js - 用于清理请求错误日志的 NPM 包
- python - pd.groupby:如何对同一组中的列进行分组
- c# - 如何在 web api 响应 (html) 中选择特定的 DIV
- javascript - 我正在尝试更改博览会相机上的闪光模式,但似乎没有任何效果(反应原生:功能组件)