C 積累04 單行英文語句的單詞計數

2021-10-04 17:39:45 字數 2096 閱讀 4769

再來積累一道題。

統計乙個英文句子中單詞的個數,假定句子中只包含字母和空格,各單詞之間用空格分隔,單詞之間的空格可以有多個。

樣例輸入:i am student

樣例輸出:3

要看乙個英文句子中有幾個單詞,有兩種方法。

看這個語句中有幾個單詞與單詞之間的空檔,假設有x個空檔,那麼單詞個數就有(x+1)個。

//注:空檔不是空格,因為單詞之間有多個空格。多個空格組成空檔。

把這個句子以空檔為間隔,分成多個字串,看能分成幾個子字串。

第一種方法,使用類來解決。**如下:

//【這個程式的思路其實就是尋找存在於兩個單詞中間的空擋有多少個】

string s1;

getline

(cin, s1,

'\n');

int countspace =0;

//記錄空格個數

bool lead =

(s1[0]

!=' ');

//這裡去掉括號也是可以的,賦值時先計算右側表示式的值,再賦給左側變數

//這裡是看輸入的字串前面有沒有空格,如果沒有的話,lead為1

for(

unsigned

int i =

0; i < s1.

length()

; i++

)//這裡是對每乙個下標都進行判斷,外層是遍歷每乙個下標

//但是內層還有乙個for迴圈,內層的是用來跳過多個相同的空格的}

cout << countspace +

1<< endl;

這裡補充一下中的getline():

cin有其缺陷,cin會忽略(傳遞並忽略)任何前導白色空格字元

例如空格、製表符、換行符

中的getline()就能彌補這個不足。【注意是裡的!】

getline()的引數:getline(is,&str,delim)

is: inputstream,輸入流,例如cin

&str, string型別的引用,用來儲存輸入流中的流資訊

delim: char型別的變數,設定的截斷字元,預設為遇到'\n'終止。

使用裡的strtok函式:

(這個strtok在vs2019裡顯示不安全,比較麻煩,但是下程式在devc++中可行)

char sentence[

100]

;char

* ssentence[

100]

;gets

(sentence)

;//gets()從輸入流中讀取字串,

//直至接受到換行符或eof(end of file,文字流的結尾,可以是標準輸入或檔案。)時停止,

//並將讀取的結果存放在引數所指向的字元陣列中。換行符不作為讀取串的內容,

//讀取的換行符被轉換為『\0』,由此來結束字串。

int count =0;

//用來計數

ssentence[count++]=

strtok

(sentence,

" ")

;//strtok首次使用需要指定sentence作為第乙個引數,之後第乙個引數為null。

//具體見下面

while

(ssentence[count -1]

!=null

)//只要當前指標被定義了,就進行迴圈

cout << count-

1<< endl;

這裡需要注意一下strtok()函式的用法:

strtok(str,delim)

當strtok()在str的字串中發現引數delim,即「分割字元」時,則會將該字元改為\0 字元;

在第一次呼叫時,strtok()必需給予引數str,往後的呼叫則將引數str設定成null。每次呼叫成功則返回指向被分割出片段的指標

需要注意的是,使用該函式進行字串分割時,會破壞被分解字串的完整,呼叫前和呼叫後的串已經不一樣了。

具體看這:

gets()函式用法見注釋。

這些**作為積累,以後再碰到類似的就能想起來了。

C語言輸入英文統計單詞的出現的頻率排序

編寫乙個程式,其功能是將使用者輸入的一段英文 注意包含空格 逗號 句號及英文本母 分離出單詞,並以每個單詞出現的次數從高到低輸出單詞極其次數,次數相同的單詞以其對應的字串大小公升序輸出 include include define max 100 void getsen char s 接受輸入句子的...

C 統計英文文字中的單詞數並排序

思路如下 1.使用的hashtable 高效 集合,記錄每個單詞出現的次數 2.採用arraylist對hashtable中的keys按字母序排列 3.排序使用插入排序 穩定 public void statisticswords string path hashtable ht new hasht...

計蒜客 最後乙個單詞的長度C

給定由大寫,小寫字母和空格組成的字串,返回 最後 乙個單詞的長度。如果輸入中不存在單詞,返回 0。注意 單詞 是指不包含空格符號的字串 例如 對於字串 hello world 不帶引號 那麼返回的結果是 5 對於字串 abc abc 不帶引號 那麼返回的結果就是 3。輸入僅一行,為字串 s 長度不超...