1. 程式人生 > 實用技巧 >寫一個函式,找出一個英文句子中的最長單詞

寫一個函式,找出一個英文句子中的最長單詞

之前程式實驗課上遇到的一道題,由於沒做出來,這裡有答案後在此記錄一下

這裡答案是非函式的方法做的,後面我自己嘗試著給改成了函式

#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語句來輸出。然而函式中其實已經把最長單詞的長度求出來了,這點應該可以採用陣列作為返回值的方法來處理,但是畢竟能力有限,姑且採用了這麼一個不著調的處理方法。