使用c++编写如下功能的程序假设有一个文本文件中存放了一篇文章,其中有英文字母、数字、汉字(汉字和中文标点符号等都占2个字节,中文标点符号等只要是非ASCII码都简单计算为中文)、中文句号。请编程统计它们各自的个数以及文本的总行数(空行也要计入总行数)。
时间: 2024-02-15 19:02:21 浏览: 64
以下是使用 C++ 编写的程序,可以实现统计文章中英文字母、数字、汉字和中文句号的个数,以及计算总行数(包括空行):
```cpp
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int main()
{
int total_lines = 0; // 总行数
int letters = 0; // 英文字母个数
int digits = 0; // 数字个数
int chinese_chars = 0; // 汉字个数
int periods = 0; // 中文句号个数
ifstream input("article.txt"); // 打开文件
string line;
while (getline(input, line)) // 逐行读取
{
++total_lines; // 总行数加一
if (line.empty()) // 空行
{
continue;
}
for (int i = 0; i < line.length(); ++i)
{
if (isalpha(line[i])) // 英文字母
{
++letters;
}
else if (isdigit(line[i])) // 数字
{
++digits;
}
else if (line[i] == '。') // 中文句号
{
++periods;
}
else if ((unsigned char)line[i] >= 0x80) // 汉字或中文标点符号等
{
++chinese_chars;
++i; // 跳过下一个字节,因为汉字和中文标点符号等都占2个字节
}
}
}
input.close(); // 关闭文件
// 输出结果
cout << "总行数:" << total_lines << endl;
cout << "英文字母个数:" << letters << endl;
cout << "数字个数:" << digits << endl;
cout << "汉字个数:" << chinese_chars << endl;
cout << "中文句号个数:" << periods << endl;
return 0;
}
```
上述程序中,通过 `ifstream` 类打开文件,然后使用 `getline` 逐行读取文件内容,累加总行数,并循环遍历每一行的字符。在字符循环中,通过 `isalpha` 和 `isdigit` 函数判断字符是否为英文字母和数字,通过比较字符是否为中文句号,判断中文句号的个数,通过比较字符的 ASCII 码值是否大于等于 0x80,判断字符是否为汉字或中文标点符号等。由于汉字和中文标点符号等都占两个字节,因此在判断汉字个数时需要跳过下一个字节。
最后,程序输出统计结果。
阅读全文