我只是想尝试计算一个单词中的字母数。为了区分字符串中的单词,我正在检查空格。如果它遇到空格,那么它就是一个单词,它有各自的字母。 例如“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);
}
答案 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
。