C 字串的輸入,求輸入字串中最長的單詞

2021-07-04 08:47:16 字數 1170 閱讀 2312

首先,基本目標很簡單,就是利用c語言:編寫乙個函式,輸入一行字元,將此行字元中的最長的單詞輸出。

**如下:

#includevoid input(char s)

s[i]='\0';//讀取完成,記得對這個字元陣列封口

}char* findmax(char s)

longest_word[i]='\0';

return longest_word;

}void main()

執行結果如下:

這裡求解字串中最長的單詞反倒是沒什麼的,就是對這個字串從頭到尾遍歷,在迭代器i遍歷字串的過程中,遇到不是空格,就是遇到單詞,i開始計算,通過對當前最大值max的對比,最終求出乙個最長的單詞。同時記錄這個單詞,最後的乙個字母的位置,而這個最大值max就是這個單詞的長度。可以倒著輸出,字串中的第p-max到第p個字母就是這個最長的單詞,最後存到字元陣列中返回,畢竟,除標頭檔案stdio.h以為,在不引入標頭檔案的情況下,c中的字串就是乙個字元陣列。

由於不是列表,這裡可以倒著操作。

這裡的難點反倒是c語言對字串的輸入處理,

可以看到**,專門為了字串處理,我獨自開了乙個函式。

雖然有scanf("%s",in_buff);可以完成字串的輸入,這裡in_buff為乙個char指標或者char陣列名,但是如果in_buff作為乙個char指標,那麼在從標準 輸入讀取資料時,將無法確定要讀取的位元組數。這是乙個著名的漏洞,當使用者輸入超出函式使用的陣列範圍時將造成緩衝區溢位。因此,不能將in_buff定義為乙個char指標,而要定義為乙個陣列名。如果作為乙個陣列名的情況,雖然c語言會把字串讀進in_buff中,但是字串之後的字元則無法填充,因此,必須有條語句為char in_buff[buffer_size+1]=『\0』,其中buffer_size為讀入字串的長度,對in_buff這個陣列左「封口」處理。否則在利用printf("%s",in_buff);輸出in_buff的時候,in_buff這個字串陣列之後的剩餘空間同樣會被輸出出來,這也就是vc中著名的「燙燙燙燙……」錯誤輸出。

封口之後,printf遇到'\0'就不再讀取了。

這裡可以見到c語言是多麼古老的一門語言,很多地方需要自己處理。

c 字串輸入

知道好多人初學者會像我一樣看不懂那些長篇的輸入介紹 也不想看 這裡有直接的 寫法!以前只會用gets 結果它被c 11標準給刪了,洛谷裡用不了。因為用得少記不住,每次都得去查一遍,這裡就直接列幾個我已知的字串的輸入方法,注意事項寫在注釋,初學應該是足夠用了,後續會不斷補充。當然cin也可以 讀到空格...

C 字串輸入

1.使用cin輸入 char a 20 cin a 遇到空字元就停止輸入,即只能輸入單個單詞。2.使用getline輸入 char a 20 cin.getline a,20 該函式有兩個引數,第乙個是陣列的名稱,第二個是要讀取的字元數。遇到換行符或者讀取完指定數目的字元停止讀取。在儲存字串時,用空...

字串輸入

之前在學習input的時候,通過它能夠完成從鍵盤獲取資料,然後儲存到指定的變數中 注意 input獲取的資料,都以字串的方式進行儲存,即使輸入的是數字,那麼也是以字串方式儲存 demo username input 請輸入使用者名稱 print 使用者名為 s username password i...