2012-05-06 87 views
-9

你知道如何找到每個字母在C++中每個字母的重複次數嗎? 例如,單詞是MISSISSIPPI。每個字母重複的次數

米 - 1

我 - 4

的S - 4

P - 2個

回答

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; 
} 
+1

爲什麼地圖?矢量應該足夠了 – skywall

+1

那麼,矢量也應該工作得很好,我只是喜歡地圖,然後他不必處理放在哪裏。它會爲他安排一切。 – Martol1ni

+0

你不需要'if/else',因爲當你訪問索引時,它會被創建並默認初始化(到'0')。所以'charCount [c] ++'就夠了。 – Default

6

由於這幾乎肯定是功課,我只會給出整體的圖片。

當然,創建一個向量,每個可能的字母之一(因爲你說英語,可能26位置矢量就足夠了)。初始化所有位置爲零。

對整個字符串運行,對於每個字母,將每個位置添加一個與您正在讀取的字符串位置中的字母對應的向量。例如,如果您正在閱讀「a」,請將1加到第一個位置。對於'b',總計1到第二個位置,依此類推。請注意,你不應該在乎大寫字母和小寫字母。

達到了字符串的結尾嗎?精細。現在遍歷矢量並顯示每個非零位置的計數。你可以把相應的字母放在一邊。

請記住,所有簡單字母都是ASCII/Latin1/UTF- *中的字母順序,所以'a'會給你相應字母的編號。 (x - 'a')會給你在向量中的字母位置。不要好奇哪個確切的價值,這不會是便攜式的。

+1

謝謝,男人!不,這不是一項家庭作業!我只是想了解如何做這樣的操作,因爲我不熟悉C++。我是一個新人。 – Jane

+0

如果理解正是您真正需要的,那麼我很樂意爲您提供幫助。 – Baltasarq

-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; 
} 
+0

如果字符串包含除A..Z以外的任何字符,則失敗嚴重a..z –

+0

您可能創建一個由256個元素組成的數組 –

+0

是的,您可以 - 或者您可以使用'ctypes.h'中的'isalpha()'在嘗試更新直方圖之前檢查您的角色。就像它雖然代碼不是一個很好的編程示例。 –

相關問題