用c++语言实现假设有一个文本文件中存放了一篇文章,其中有英文字母、数字、汉字(汉字和中文标点符号等都占2个字节,中文标点符号等只要是非ASCII码都简单计算为中文)、中文句号。请编程统计它们各自的个数以及文本的总行数(空行也要计入总行数)。
时间: 2024-02-15 18:04:39 浏览: 107
下面是一个简单的 C++ 程序实现对文本文件中英文字母、数字、汉字、中文标点符号和中文句号的统计以及文本的总行数的统计:
```c++
#include <iostream>
#include <fstream>
#include <string>
#include <cctype>
using namespace std;
int main() {
ifstream infile("test.txt");
if (!infile) {
cerr << "Error: file could not be opened" << endl;
exit(1);
}
int num_lines = 0;
int num_letters = 0;
int num_digits = 0;
int num_chinese = 0;
int num_punctuation = 0;
int num_periods = 0;
string line;
while (getline(infile, line)) {
num_lines++;
for (int i = 0; i < line.length(); i++) {
if (isalpha(line[i])) {
num_letters++;
}
else if (isdigit(line[i])) {
num_digits++;
}
else if (line[i] >= 0 && line[i] <= 127) {
num_punctuation++;
}
else if ((line[i] >= 0xB0 && line[i] <= 0xF7) && (line[i + 1] >= 0xA1 && line[i + 1] <= 0xFE)) {
num_chinese++;
i++;
}
else if (line[i] == '。') {
num_periods++;
}
}
}
cout << "Number of lines: " << num_lines << endl;
cout << "Number of letters: " << num_letters << endl;
cout << "Number of digits: " << num_digits << endl;
cout << "Number of Chinese characters: " << num_chinese << endl;
cout << "Number of punctuation marks: " << num_punctuation << endl;
cout << "Number of periods: " << num_periods << endl;
infile.close();
return 0;
}
```
这个程序首先打开名为 "test.txt" 的文本文件,并分别用变量 num_lines、num_letters、num_digits、num_chinese、num_punctuation 和 num_periods 统计文本的总行数,英文字母、数字、汉字、中文标点符号和中文句号的个数。程序使用 getline 函数逐行读取文本文件,对于每一行,程序使用循环遍历每个字符,并使用 isalpha 函数判断字符是否为英文字母,使用 isdigit 函数判断字符是否为数字,使用 ASCII 码值判断字符是否为中文标点符号,使用Unicode编码判断字符是否为汉字,使用字符匹配判断是否为中文句号。最后程序输出以上统计结果,并关闭文件。
阅读全文