2016-06-30 98 views
-4

我正試圖解決這個問題:我如何擺脫C++循環?

編寫一個程序來計算每個不同的單詞出現在其輸入中的次數。

這是迄今爲止代碼:

#include <algorithm> 
#include <iomanip> 
#include <ios> 
#include <iostream> 
#include <string> 
#include <vector> 
#include <iterator> 

using std::cin; 
using std::sort; 
using std::cout; 
using std::streamsize; 
using std::endl; 
using std::string; 
using std::setprecision; 
using std::vector; 

int main() 
{ 
    cout << "Enter words: "; 
    vector<string> lista; 
    vector<string> listaCitita; 
    string x; 
    while(cin >> x) 
    { 
     lista.push_back(x); 
    } 

int listaSize = lista.size(); 
for(int i = 0; i <= listaSize -1; i++) 
{ 
    int x = 0; 
    int counter = 0; 
    vector<string>::iterator it = find(listaCitita.begin(), listaCitita.end(), lista[i]); 
    vector<string>::iterator itu = find(lista.begin(), lista.end(), lista[i]); 
    if(it != listaCitita.end()) 
    { 
     break; 
    } 
    while(x <= listaSize -1) 
    { 


     if(lista[i] == lista[x]) 
     { 
      counter++; 
      x++; 
      if(itu != lista.end()) 
      { 
      } 
      else 
      { 
       listaCitita.push_back(lista[i]); 
      } 
     } 
     else 
     { 
      x++; 
     } 


    } 
    cout << "The string: '" << lista[i] << "' appeared " << counter << " times" << endl; 

} 

return 0; 


} 

我想要做的是,如果它已經被打印了多少次這個詞表明,它不會是印刷再次多少次顯示。 這就是爲什麼我做了第二個向量(listaCitita),我添加了已經迭代過的元素。問題是當我這樣做時,它不會突破for循環。

if(it != listaCitita.end()) 
    { 
     break; 
    } 

對不起我的英語不好。謝謝。

+0

是什麼讓你覺得它不會打破循環?在if(it!= listaCitita.end())之前添加調試打印'cout <<(listaCitita.end()== it?「it = end」:「it!= end」)<< endl; '。添加'cout <<「它打破了!」在'break'之前,'endl';添加'cout <<「沒有打破!」在'}之後的<< endl'。走着瞧吧。 – user31264

+0

做到了。它沒有中斷。 – furthergarden

+0

請發送輸出摘錄。 – user31264

回答

2

break語句結束最近出現的封閉循環或條件語句的執行。如果有的話,控制權傳遞給陳述結束後的陳述。

當你到達break,你會跳在for環(return 0)結束。你想在這裏使用的是continue關鍵字,它會跳過當前單詞並繼續下一個單詞。

0

如果你的程序達到了突破,它肯定會突破它。

另一種突破循環的方式,特別是如果它是一個嵌套循環,並且你想跳出一個外部循環,那麼將會到達。

... 
while(...) { while(...) { if(...) { goto end; }}} 
end: //will jump here 
... 
0

你可以擺脫使用gotothrowreturn嵌套循環的(當然,你需要你的循環分成一個函數或拉姆達這後一種方法的工作)。

在任何情況下,您的特定任務都不會要求突破嵌套循環或任何其他循環。您需要檢查單詞是否已經打印在外部循環中。如果是,請繼續,否則繼續進行計數,打印並將其推送到已打印單詞的矢量。

使用適合任務的容器和/或算法將消除完全使用嵌套循環的需要。考慮std::unordered_map。還讀了約std::count