计算单词中的字母数和句子中的单词数

时间:2014-12-16 10:57:04

标签: c

我只是想尝试计算一个单词中的字母数。为了区分字符串中的单词,我正在检查空格。如果它遇到空格,那么它就是一个单词,它有各自的字母。 例如“Hello World”。所以输出应该像

o/p
Hello has 5 letters
World has 5 letter

但是当我尝试编写代码时,我收到了Segmentation fault。以下是代码。

#include <stdio.h>
#include <string.h>

main(void) {

    int nc = 0;
    int word = 0;

    char str[] = "This test";
    int len = strlen(str);
    int i;
    for(i = 0; i < len; i++)
    {
        ++nc;
        if(isspace(str)){        
             ++word;   
        }

    }

    printf("%d\n",nc);

}

6 个答案:

答案 0 :(得分:2)

在开头添加#include <ctype.h>以获取isspace()的原型和

if(isspace(str))

应该是

if(isspace(str[i]))

答案 1 :(得分:2)

试试这个..

for(i = 0; i < len; i++)
{
   if(isspace(str[i]))
   {
       ++word;
       continue;
   }
  ++nc;
}

if(len>0) word++;

printf("%d %d\n",nc, word);

答案 2 :(得分:2)

首先,在代码中添加#include <ctype.h>

接下来,isspace()引入一个int参数并检查输入[以ASCII值表示]

  

空白字符。在&#34; C&#34;和&#34; POSIX&#34;区域设置,包括:空格,换页(&#39; \ f&#39;),换行(&#39; \ n&#39;),回车(&#39; \ r&#39;),水平标签(&#39; \ t&#39;)和垂直标签(&#39; \ v&#39;)。

因此,您需要将数组str的元素逐个提供给isspace()。为此,您需要将代码更改为

if(isspace(str[i]))

如果str[i]是空格字符,则会给出非零值。

此外,为了匹配您所需的输出[如问题中所述],您需要在str[i]的每个nc值之后使用TRUE的中间值并重置isspace() {1}}。

答案 3 :(得分:1)

改变这样的条件。

 if(isspace(str[i]))

因为isspace是int isspace(int c);

答案 4 :(得分:0)

int isspace(int c);

这是isspace()函数的原型。

您需要传递要检查的值,如:

isspace(str[i]);

不是整个字符串。

答案 5 :(得分:0)

试一试

int len = strlen(str);    //len will be number of letters
for(int i = 0; i < len; i++)
{
    if(isspace(str[i]))       
         ++word;   
}

if(len){
//if you dont want to count space letters then write
//len -= word; 
    word++;     //counting last word
}
printf("letters = %d, Words =%d", len,word);

当您收到len时,它会给您一些字母,因此无需计算nc