gpt4 book ai didi

c++ - 计算字符串中所有字符的函数 - C++

转载 作者:行者123 更新时间:2023-11-30 00:35:55 26 4
gpt4 key购买 nike

我想用 C++ 写一个函数,它计算一个字符串中的所有字符。#我有一个名为 input 的字符串,程序的用户可以在其中输入一个句子,我将重要的字母存储在这样的字符串字母表中:

string alphabet {"ABCDEFGHIJKLMNOPQRSTUVWXYZ"};

和一个用于存储字母出现频率的 vector ,例如A 位于位置 0,B 位于位置 0,依此类推。

vector<long> letterCount (26);

我已经按照我认为它应该工作的方式编写了这个函数,它似乎能够计算出字符的出现,但之后这个数字乘以字母在字母表中的位置。这是函数:

long countLetters(int& p) {
for(int i = 0; i < alphabet.size(); ++i) {
for(long j = 0; j < count(input.begin(), input.end(), alphabet.at(i)) {
countLetters.at(i)++;
}
}
return letterCount.at(p);
}

例如,如果输入是“HELLO”,程序输出:

E : 5
H : 8
L : 24
O : 15

所以你看,例如字母“L”在字符串中包含两次,但“L”的结果是 24,因为“L”在字母表中的位置为 12。

如果你知道我的问题是什么,请帮忙。

编辑:我找到了一种至少部分有效的方法:

long countLetters(int& p) {
for(size_t i = 0; i < input.length(); ++i) {
for(size_t j = 0; j < alphabet.length(); ++j) {
letterCount.at(j) = count(input.begin(), input.end(), alphabet.at(j));
}
}
return letterCount.at(p);
}

但是当输入两个或更多单词时,该函数只计算第一个单词中出现的字母。如何分析更多的词?

编辑:在我有 cin >> input 之前,但是 getline(cin, input); 是正确的。

最佳答案

你在做某种奇怪的双循环。相反,在单个循环中遍历字符串并将其计入正确的组中:

for (int i = 0; i < input.length(); i++) {
char c = input[i];
if (c < 'A' || c > 'Z') continue;
countLetters[c-'A'] += 1;
}

关于c++ - 计算字符串中所有字符的函数 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17628657/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com