You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++实现统计各字母开头单词数的程序开发求助

解决你的C++单词首字母统计问题

Hey,你已经完成了最核心的单词提取部分啦!现在就差把首字母的统计逻辑补上,再把结果输出到新文件里。我来帮你一步步完善代码:

首先,你定义的alphabet[26]数组没有初始化,里面默认是随机垃圾值,这肯定没法正确统计。咱第一步先把数组初始化为全0:

int alphabet[26] = {0}; // 每个字母的计数初始都是0

然后,你之前是把首字母直接输出到控制台,现在改成对应索引的计数加1。比如字母'A'对应的索引是'A' - 'A' = 0,'B'是1,以此类推,所以每次拿到首字母后:

char first_letter = toupper(word[0]);
alphabet[first_letter - 'A']++; // 对应字母的计数+1

读取完所有单词后,我们需要遍历这个数组,把A-Z每个字母和对应的计数输出,同时写入到新文件里。比如创建一个result.txt来保存结果。另外别忘了处理文件读取失败的异常情况,让程序更健壮。

下面是完整的修改后的代码:

#include <iostream>
#include <fstream>
#include <string>
#include <cctype>

using namespace std;

int main() {
    ifstream fin("test.txt");
    // 检查输入文件是否成功打开
    if (!fin.is_open()) {
        cerr << "无法打开输入文件test.txt!" << endl;
        return 1;
    }

    string word;
    char ch;
    int alphabet[26] = {0}; // 初始化所有字母计数为0

    while (fin.get(ch)) {
        if (isspace(ch)) {
            continue; // 跳过空格字符
        } else if (ch == ':') { // 遇到冒号,代表一个单词结束
            if (!word.empty()) { // 避免处理空单词(比如连续冒号的情况)
                char first_letter = toupper(word[0]);
                alphabet[first_letter - 'A']++;
                word.clear();
            }
        } else {
            word += ch;
        }
    }

    // 处理文件最后一个没有冒号结尾的单词
    if (!word.empty()) {
        char first_letter = toupper(word[0]);
        alphabet[first_letter - 'A']++;
    }

    // 创建并打开输出文件
    ofstream fout("result.txt");
    if (!fout.is_open()) {
        cerr << "无法创建输出文件result.txt!" << endl;
        return 1;
    }

    // 遍历A-Z,同时输出到控制台和文件
    for (int i = 0; i < 26; i++) {
        char letter = 'A' + i;
        cout << letter << " " << alphabet[i] << endl;
        fout << letter << " " << alphabet[i] << endl;
    }

    // 关闭文件
    fin.close();
    fout.close();

    cout << "统计完成,结果已保存到result.txt" << endl;
    return 0;
}

关键细节说明:

  • 新增文件打开失败的判断,避免程序无意义崩溃
  • 初始化计数数组为全0,确保统计起点正确
  • 处理了空单词的边界情况(比如输入中有连续冒号)
  • 读取完成后遍历数组,同时输出到控制台和目标文件
  • 手动关闭文件,养成规范的文件操作习惯

用你给出的输入示例测试的话,输出文件result.txt里的内容会和你预期的完全一致:

A 0
B 1
C 0
D 0
E 1
F 1
G 0
H 1
I 0
J 0
K 0
L 1
M 2
N 0
O 0
P 1
Q 1
R 0
S 3
T 0
U 0
V 1
W 1
X 0
Y 1
Z 0

内容的提问来源于stack exchange,提问作者Uchida

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:22:14