2016-09-23 258 views

回答

1

冒泡排序:

vector<string> strings = split(str); 
for (int i = 0; i < strings.size(); i++) { 
    for (int j = 0; j < strings.size() - 1; j++) { 
     if (strings[j + 1] < strings[j]) { 
      string tmp = strings[j]; 
      strings[j] = strings[j + 1]; 
      strings[j + 1] = tmp; 
     } 
    } 
} 

訂貨後計數的話:

string prev = strings[0]; 
int counter = 1; 

for (int i = 1; i < strings.size(); i++) { 
    if (strings[i] == prev) { 
     counter++; 
    } else { 
     cout << prev << ": " << counter << " "; 
     prev = strings[i]; 
     counter = 1; 
    } 
} 
+0

我應該在最後做一個計數器來將它添加到向量字符串嗎? – javakook

+0

添加什麼?向量中的字符串只是交換 –

+0

也記錄了每個單詞重複的次數。示例輸出:「這是一個測試」這個:1是:2 a:1測試:1 – javakook

4

最好的方法來計算唯一的話就是用std::unordered_map<std::string, int>,然後在地圖增量值:wordMap[word]++;需要注意的是,如果這是這個詞的第一個出現,默認值將被創建並且它是0,這適合任務。

除此之外,當std :: sort對於大多數情況來說相當好的時候實現自我排序並不好。

+0

對不起,我只能使用冒泡排序 – javakook

0

您可以使用std ::從algorithm發現:

std::find(strings.begin(), strings.end(), the_word_you_looking_for) != strings.end() 

這會返回一個布爾(如果存在的話真,否則爲false)

您還可以設置一個計數器,然後每遇到一個true就遞增一次。

+0

謝謝,不幸的是我除了冒泡排序之外不能使用任何東西。 – javakook

0

這樣做的一種方法是將所有子字符串保存到向量中,然後在向量上使用std :: count函數並將結果放入一個映射中。這裏是示例代碼

std::string s = "This is very good text and is really good to read"; 
     // Putting all substrings into a vector.. Need code to do that, for simplicity I am showing here manually 
     vector<string> v1; 
     v1.push_back("This"); 
     v1.push_back("is"); 
     v1.push_back("very"); 
     v1.push_back("good"); 
     v1.push_back("text"); 
     v1.push_back("and"); 
     v1.push_back("is"); 
     v1.push_back("rally"); 
     v1.push_back("good"); 
     v1.push_back("to"); 
     v1.push_back("read"); 
     // Map to create the result 
     map<string, int> mp; 
     for (auto v : v1) { 
      size_t n = std::count(v1.begin(), v1.end(), v); 
      mp[v] = n; 
     } 

     for (auto mvalue : mp) { 
      cout << "String = " << mvalue.first.c_str() << " Count Is " << mvalue.second << endl; 
     } 
相關問題