-10

你知道如何在 C++ 中找到单词中每个字母的重复次数吗?例如,这个词是密西西比州。

米 - 1

我 - 4

小号 - 4

P - 2

4

3 回答 3

6

由于这几乎肯定是功课,我只会给出整体情况。

当然,为每个可能的字母创建一个向量(因为您说英语,可能 26 位向量就足够了)。将所有位置初始化为零。

遍历整个字符串,对于每个字母,将每个位置添加到与您正在阅读的字符串位置中的字母对应的向量中。例如,如果您正在阅读“a”,则将 1 与第一个位置相加。对于“b”,将 1 与第二个位置相加,依此类推。请注意,您不应该关心大写和小写。

到达字符串的末尾?美好的。现在遍历整个向量并显示每个非零位置的计数。你可以把对应的字母放在它的一边。

请记住,所有简单字母都按 ASCII/Latin1/UTF-* 的字母顺序排列,因此“a”将为您提供相应字母的编号。( x - 'a' ) 会给你字母在向量中的位置。不要好奇哪个确切的值是不可移植的。

于 2012-05-06T09:40:59.927 回答
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;
}
于 2012-05-06T09:40:47.233 回答
-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;
}
于 2012-05-06T09:59:05.037 回答