我想用 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/