演算法提高 統計單詞數

2021-07-30 01:50:04 字數 1844 閱讀 7555

問題描述

統計輸入英文文章段落中不同單詞(單詞有大小寫之分,  但統計時忽略大小寫)各自出現的次數。 輸入段落中所含單詞的總數不超過100,最長單詞的長度不超過20個字母.

輸入格式

乙個包含若干句子的段落, 每個句子由若干英文單詞組成. 除空格,  逗號和句號外, 這些輸入的句子中不含其他非字母字元, 並且, 逗號和句號緊跟在它前面的英文單詞後面, 中間沒有空格. 段落最後乙個字元是回車符,  表示輸入結束.

輸出格式

若段落中共有m個不同的英文單詞,則按照其在段落中出現的先後順序輸出m行,各行的格式為:  單詞中所有字母均用大寫形式輸出(最長的單詞頂格輸出,它前面沒有多餘的空格;  其餘單詞與其右對齊)+冒號+n個*號+該單詞在段落中的出現次數n

樣例輸入

this is a test. this test is easy. this is a test. this test is easy.

樣例輸出

this:****4

is:****4

a:**2

test:****4

easy:**2

本來想用map做,可發現輸出順序為單詞輸入順序,所以決定用vector容器,元素型別是pair

我還用到了輸入控制,cin.get(),具體用法及示例見我的部落格:

transform用法**)

transform函式的作用是:將某操作應用於指定範圍的每個元素。transform函式有兩個過載版本:

transform(first,last,result,op);//first是容器的首迭代器,last為容器的末迭代器,result為存放結果的容器,op為要進行操作的一元函式物件或sturct、class。

例如將string大小寫反轉就可以用transform來實現

#include #include using namespace std;

char op(char ch)

int main()

for(int i=0;i>t;

b.push_back(t);

}sum.resize(n);

transform(a.begin(),a.end(),b.begin(),sum.begin(),op);

for_each(sum.begin(),sum.end(),print);

return 0;

}

輸入: 5

1 2 3 4 5

-1 3 6 7 0

輸出:0 5 9 11 5

注意:第二個過載版本必須要保證兩個容器的元素個數相等才行,否則會丟擲異常。

題目**:

#include#include#include#includeusing namespace std;

vector> word;

int main()

{

string s;

int i;

while(cin>>s)//單個按詞輸入

{ if(s[s.length()-1]=='.'||s[s.length()-1]==',')//如果是句號或者逗號就去掉

s.erase(--s.end());

transform(s.begin(),s.end(),s.begin(),::toupper);//toupper是將將字元轉化為大寫的函式

for(i=0;i

演算法提高 統計單詞數

演算法提高 統計單詞數 時間限制 1.0s 記憶體限制 512.0mb 問題描述 統計輸入英文文章段落中不同單詞 單詞有大小寫之分,但統計時忽略大小寫 各自出現的次數。輸入段落中所含單詞的總數不超過100,最長單詞的長度不超過20個字母.輸入格式 乙個包含若干句子的段落,每個句子由若干英文單詞組成....

試題名稱 演算法提高 統計單詞數

試題 演算法提高 統計單詞數 資源限制 時間限制 1.0s 記憶體限制 512.0mb 問題描述 統計輸入英文文章段落中不同單詞 單詞有大小寫之分,但統計時忽略大小寫 各自出現的次數。輸入段落中所含單詞的總數不超過100,最長單詞的長度不超過20個字母.輸入格式 乙個包含若干句子的段落,每個句子由若...

統計單詞數

include include include include include includeusing namespace std struct node int main else if s.find 1 transform s.begin s.end s.begin toupper sourc...