1. 程式人生 > >C語言練習題每練 1:字串統計單詞個數,單詞由空格隔開

C語言練習題每練 1:字串統計單詞個數,單詞由空格隔開

空格隔開,所以空格是一個標誌性的符號,可以通過空格來統計單詞的個數。首先,分析一下所能遇到的各種情況。相鄰兩個字元組合情況為:空空;空字:字空;字字。特殊情況考慮有全空,全字,空空空字空空空。
因為要兼顧前後所以需要兩個變數來指示,p指示前一個初始為0,C指示當前。
for迴圈結束條件 c指到’\0’.

  • p==0:

          C=空   不操作;
          C=字   臨界狀態,單詞開始了,num++,p=1;
    
  • p==1:

          C=空  單詞結束了,p=0;
          C=字   單詞未結束,不操作。
    

全空時,沒有觸發 p=0 C=字狀態 num沒有改變值 依然為零。
全字時,初狀態p=0 所以歸結到p=0 C=字的狀態下,num計了一個數,後續全是p=1,C=字情況num不再增加。
空空空字空空空,持續空不操作 直到空字相鄰計數,字空相鄰不計數。

#include<stdio.h>
void main()
{   int i,num=0,p=0;
    char str[50],c;
    printf("Please input a line text:");
    gets(str);
    for(i=0;(c=str[i])!='\0';i++){
        if(p==0&&c!=' ') {num++; p=1;}
        if(p==1&&c==' ') p=0;
    }
        printf("There are %d words\n",num);
}
//輸入一行字元,統計單詞個數,單詞用空格隔開。

#include<stdio.h>

void main(){
char *s;
char string[50];
printf("Please input a line text:");
gets(string);
//scanf("%s",string);對空格失效
printf("%s\n",string);
char c;
int i=0,p=0,num=0;
for(i=0;(c=string[i])!='\0';i++)
    if(c==' ') p=0;//空字串
    else if(p==0) //C!=0 but word==0  臨界狀態,空格後面跟著一個字元!
{ p=1; num++; } printf("There's totally %d words.",num); }