2016-12-29 72 views
1

我想要使用地圖計數重複的單詞,如果用戶輸入字符串,一旦輸出將是「OK」,否則輸出將是字符串和重複時間的數字串旁邊使用地圖來計算字符串輸入

我知道代碼看起來非常愚蠢的,這是我第一次使用地圖和我不熟悉的語法

任何幫助將不勝感激

int main() 
{ 
    int t, i = 0; 
    string s; 
    map<string, int> m; 
    cin >> t; 
    while (t--) { 
     cin >> s; 
     m[s] = i++; 
     if (i == 0) 
      cout << "OK"; 
     else 
      cout << m[s] << m.second << endl; 
    } 
} 
+3

那麼究竟是什麼問題? – Mureinik

+0

要小心,你在while循環的每次迭代中增加'i'。因此,您在第一個字符串之後輸入的每個字符串將被視爲重複(假設't'> 1)。 –

回答

3
cin >> s; 
    m[s]++; 
    if (m[s] == 1) 
     cout << "OK\n"; 
    else 
     cout << "this is the " << m[s] << "th occurence of " << s << "\n"; 

請注意,即使s尚未位於地圖中,您也可以使用m[s],因爲運營商[]會自動添加並將其第二個初始化爲零。

編輯:避免在地圖上搜索兩次(見@Slava的評論),我們可以做這樣(快)好:

cin >> s; 
    i = ++m[s]; 
    if (i == 1) 
     cout << "OK\n"; 
    else 
     cout << "this is the " << i << "th occurence of " << s << "\n"; 
+0

雖然這個代碼可以工作,但它隱藏了這樣一個事實,即無需執行兩次甚至三次昂貴的操作。 – Slava

+0

@Slava真實,增加了第二個版本,只做一次搜索。 –

+0

謝謝,這非常有幫助 – Codingeek

相關問題