假设有一个文本文件中存放了一篇文章,其中有英文字母、数字、汉字(汉字和中文标点符号等都占2个字节,中文标点符号等只要是非ASCII码都简单计算为中文)、中文句号。请c++编程统计它们各自的个数以及文本的总行数(空行也要计入总行数)
时间: 2024-02-15 08:01:47 浏览: 132
c++实现文本中单词和汉字的统计
5星 · 资源好评率100%
好的,我可以为您提供一个基于C++的解决方案。以下是代码示例:
```c++
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main() {
string filename = "article.txt"; // 文本文件名
ifstream inFile(filename); // 打开文件流
int englishCnt = 0; // 英文字母个数
int digitCnt = 0; // 数字个数
int chineseCnt = 0; // 中文字符个数
int periodCnt = 0; // 句号个数
int lineCnt = 0; // 总行数
string line; // 存储每一行数据的字符串
if (!inFile) { // 判断文件是否打开成功
cerr << "Unable to open file " << filename << endl;
exit(1);
}
while (getline(inFile, line)) { // 逐行读取文件内容
lineCnt++; // 总行数自增
if (line.empty()) continue; // 如果该行为空行则跳过
bool hasPeriod = false; // 标记该行是否有句号
for (char c : line) {
if (isalpha(c)) { // 判断是否是英文字母
englishCnt++;
} else if (isdigit(c)) { // 判断是否是数字
digitCnt++;
} else if (c == '。') { // 判断是否是中文句号
chineseCnt++;
periodCnt++;
hasPeriod = true;
} else if (c > 127) { // 判断是否是中文字符
chineseCnt++;
}
}
if (!hasPeriod) periodCnt++; // 如果该行没有句号,则总句号数自增
}
cout << "Total lines: " << lineCnt << endl;
cout << "Total English letters: " << englishCnt << endl;
cout << "Total digits: " << digitCnt << endl;
cout << "Total Chinese characters: " << chineseCnt << endl;
cout << "Total periods: " << periodCnt << endl;
inFile.close(); // 关闭文件流
return 0;
}
```
该程序首先打开指定的文本文件,然后逐行读取文件内容。对于每一行,程序会先将总行数自增,然后判断该行是否为空行。如果非空,则程序会遍历该行的每一个字符,并根据字符类型将相应的计数器自增。如果该行中没有中文句号,则程序会将总句号数自增。最后,程序会输出各个计数器的值。
请注意,该程序只能处理UTF-8编码的文本文件,如果您的文本文件采用的是其他编码方式,则需要进行相应的调整。
阅读全文