0

私は C プログラミングが初めてで、文字列内の単語数をカウントするためのコードを作成しようとしています。コード数をカウントするためのコードは次のとおりです。

    #include<stdio.h> 
    #include<string.h>
    void main() 
    { 
        int count=0,i,len; 
        char str[100]; 
        printf("enter the sentence"); 
        gets(str); 
        len=strlen(str); 
        for(i=0;i<=len;i++) 
        {  
           if(str[i]==' ') 
              count++; 
        } 
        printf("the number of words are :\t%d",count+1); 
    }

私の入力が次の場合:Here is four words正常に動作します。それは出力を与える the number of words are : 4

私の質問は、入力の「先頭のスペース」と「最後のスペース」という単語の間の「2 つの連続するスペース」をどのように処理するかです。

4

8 に答える 8

0

以下を使用できます。

 while(str[i]==' '&&str[i]!=EOF) 
{
    count++;
    i++;
}

あなたのif部分の代わりに。また、for ループの前にこれらのコードを追加して、先頭のスペースを読み取る必要があります。

于 2013-04-20T02:48:42.673 に答える
0

今の形ではループがうまくいかないのではないかと思いますが、

次のようになります。

    for(i=0;i<len;i++) 
    { 
          if(i!=0)
          {
             if(str[i]==' ') 
               count++; 
          }
    }  

他の基準を確認するには、コードを次のように変更します。

    for(i=0;i<len;i++) 
    { 
             if(str[i]==' ') 
             {  
                if(i!=0)
                {  
                   if(str[i+1]!=' ')
                   {
                      count++;
                   } 
               }   
    }  
于 2013-04-20T02:48:55.873 に答える
0

先頭のスペースと他のスペースの直後のスペースを無視し、最後にスペースがない場合は +1 します。

#include <stdio.h> 
#include <string.h>
// #include <stdlib.h>
int main() // void main is a bad practice
{ 
    int count = 0, i, len, ignoreSpace; 
    char str[100];
    printf("enter the sentence\n"); 
    gets(str); 
    len = strlen(str); 
    ignoreSpace = 1; // handle space at the beginning
    for(i = 0; i < len; i++) // not i<=len
    { 
        if(str[i] == ' '){
            if(!ignoreSpace){
                count++;
                ignoreSpace = 1; // handle two or more consecutive spaces
            }
        }else{
            ignoreSpace = 0;
        }
    }
    if( !ignoreSpace ) // handle space at the last
        count++;
    printf("the number of words are :\t%d\n", count); // +1 is moved to previous line
    // system("pause");
    return 0;
}
于 2013-04-20T02:56:24.890 に答える