寫一個函式,找出一個英文句子中的最長單詞
阿新 • • 發佈:2020-11-27
之前程式實驗課上遇到的一道題,由於沒做出來,這裡有答案後在此記錄一下
這裡答案是非函式的方法做的,後面我自己嘗試著給改成了函式
#include <stdio.h> #include <string.h> int main() { char str[233]; //自定義一個數組 printf("輸入所要查詢的句子\n");//輸入字串 gets(str); int i,a,b,c; a=b=c=0;//初始化a,b,c為0,a為已經掃描過的單詞的當初,b為正在掃描的單詞的長度 for(i=0;i<strlen(str);i++)//設定迴圈進行掃描空格字元 {if(str[i]!=' ')//當陣列中對應元素不是空格字元時 b的數值加1,進行計數 { b++; if(a<=b)//將b於a的值進行比較,b大於a,則將b的值賦給a,並通過c來計算最長單詞的起始位置 { a=b; c= i-a+1; } continue;//當成條件後終止此次迴圈 } else //否則則將掃描後的b歸零 { b=0; } } printf("最長單詞是\n");//輸出最長單詞 for(i =c;i<c+a;i++) printf("%c",str[i]); }
這個程式碼其實寫出來到不算是難,但是細節的處理很重要,就比如最後那個else和b=0,我是萬萬沒有考慮到的
後面我改成了函式
具體程式碼如下:
#include <stdio.h> #include <string.h> int findword(char a[]);//函式宣告 int main() { char a[100]; gets(a); int beginning; beginning=findword(a); while(a[beginning]!=' '){//從最長單詞的首字元開始輸出,遇到空格字元時停止 printf("%c",a[beginning]); beginning++;} } int findword(char word[]){//這裡findword單詞記錄的僅僅是最長單詞的起始字元。 int n,i,a,b,c; a=b=c=0; n=strlen(word); for(i=0;i<n;i++){ if(word[i]!=' '){//遇到非空格字元時,b的數值加一 b++;//b用來儲存當前單詞的長度,切記清零 if(a<=b){//a用來儲存掃描到的較長單詞 a=b; c=i-a+1;//用c來記錄最長單詞的起始位置 } continue;//這裡沒有continue可能會導致else和第一個if語句同時執行,導致程式出錯 } else b=0;//如果得到的a>b,將b清零,用來記錄下一個單詞長度,否則b的值會一直增加,導致輸出結果錯誤 } return c; }
由於能力有限,我這個定義的函式就是僅僅把最長單詞的首字元作為返回值,後面用while語句來輸出。然而函式中其實已經把最長單詞的長度求出來了,這點應該可以採用陣列作為返回值的方法來處理,但是畢竟能力有限,姑且採用了這麼一個不著調的處理方法。