使用C++。假设有一个文本文件中存放了一篇文章,其中有英文字母、数字、汉字(汉字和中文标点符号等都占2个字节,中文标点符号等只要是非ASCII码都简单计算为中文)、中文句号。请编程统计它们各自的个数以及文本的总行数(空行也要计入总行数)。
时间: 2024-02-15 15:03:06 浏览: 61
统计大文件中各个字符的数量(中文、英文、数字)
5星 · 资源好评率100%
好的,这是一个比较基础的文本读取和统计问题,可以使用C++中的文件输入输出流和计数器来实现。以下是一个可能的代码实现:
```cpp
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream fin("article.txt"); // 打开文件
if (!fin) { // 判断文件是否打开成功
cout << "文件打开失败!" << endl;
return 0;
}
int eng_cnt = 0, num_cnt = 0, chi_cnt = 0, dot_cnt = 0, line_cnt = 0;
char c, prevc = '\n';
while (fin.get(c)) {
if (c == '\n') { // 换行符表示一行结束
line_cnt++;
}
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) { // 英文字母
eng_cnt++;
} else if (c >= '0' && c <= '9') { // 数字
num_cnt++;
} else if ((unsigned char)c >= 0x80) { // 中文或中文标点
chi_cnt++;
} else if (c == '。') { // 中文句号
dot_cnt++;
}
prevc = c; // 记录前一个字符
}
if (prevc != '\n') { // 如果最后一个字符不是换行符,说明还有一行未统计
line_cnt++;
}
fin.close(); // 关闭文件
cout << "英文字母个数:" << eng_cnt << endl;
cout << "数字个数:" << num_cnt << endl;
cout << "汉字或中文标点个数:" << chi_cnt << endl;
cout << "中文句号个数:" << dot_cnt << endl;
cout << "总行数:" << line_cnt << endl;
return 0;
}
```
其中,用 `ifstream` 打开文件,用 `fin.get(c)` 读取一个字符,然后根据字符的类型进行计数,同时记录每行结束的位置,以统计总行数。最后输出各种字符的个数和总行数即可。
需要注意的是,中文和中文标点占用两个字节,因此需要使用 `unsigned char` 来判断其是否为中文字符。同时,因为最后一行可能没有换行符,需要特判一下最后一个字符是否为换行符。
阅读全文