你知道如何在C ++中找到一个单词中每个字母的重复次数吗? 例如,这个词是MISSISSIPPI。
M - 1
I - 4
S - 4
P - 2
答案 0 :(得分:6)
由于这几乎肯定是功课,我只会给出整体情况。
当然,创建一个向量,每个可能的字母一个(因为你说英语,可能是26位置向量就足够了)。将所有头寸初始化为零。
遍历字符串,对于每个字母,为每个位置添加一个到与您正在读取的字符串位置中的字母对应的向量。例如,如果您正在阅读'a',请将1加到第一个位置。对于'b',将1加到第二个位置,依此类推。请注意,你不应该关心大案和小案。
到达字符串的末尾?精细。现在遍历向量并显示每个非零位置的计数。你可以把相应的字母放在一边。
请记住,所有简单字母都是ASCII / Latin1 / UTF- *中的字母顺序,因此'a'将为您提供相应字母的编号。 (x - 'a')将为您提供向量中字母的位置。不要对哪个确切的值感到好奇,那是不可移植的。
答案 1 :(得分:2)
使用地图...自己选择是否要处理大写/小写和标点符号/其他符号。
#include <map>
#include <iostream>
using namespace std;
int main() {
string word = "MISSISSIPPI";
map<char,int> charCount;
for (unsigned int i=0; i<word.size(); i++)
charCount[word[i]]++;
for (map<char, int>::iterator it = charCount.begin(); it != charCount.end(); ++it)
cout << it->first << ": " << it->second << endl;
return 0;
}
答案 2 :(得分:-1)
我想你可以尝试这样的事情:
#include <iostream>
#include <cstring>
int main()
{
const int N = 26;//number of characters in the alphabet
int count[N];
char *str = "MISSISSIPPI";
for (int i = 0; i < N; i++) count[i] = 0;
for (int i = 0; i < strlen(str); i++)
{
if (str[i] >= 'a' && str[i] <= 'z')
++count[str[i]-'a'];
else if (str[i] >= 'A' && str[i] <= 'Z')
++count[str[i] - 'A'];
}
for (int i = 0; i < N; i++)
cout << (char)('a'+i) << " - " << count[i];
return 0;
}