[英]Count length and number of words in string
我是C语言的初学者。我正在尝试打印出用户输入的字符串中单词的长度和数量。 我在处理单词计数时遇到麻烦。 我尝试扫描空格字符的数量 ,然后将1加到结果中。 确保每个单词仅用一个空格分隔。
我执行了代码,然后输入
I go to school by bus.
第二个输出不符合我的预期
22
24
22
是正确的,因为它确实是字符串的长度,但是我不明白为什么它显示24
而不是6
(5个空格加1的结果)。
代码如下
#include<stdio.h>
#include<string.h>
int main(){
char in[256];
int cl=0,cw,i;
scanf("%[^\n]",&in);
cw=strlen(in);
for(i=0;i<=cw;i++){
if(in[i]=' '){
cl=cl+1;
}
}
printf("%d\n",cw);
printf("%d\n",cl+1);
return 0;
}
出了什么问题,如何获得正确的输出?
if(in[i]=' '){
将永远是真的,您需要将其更改为
if(in[i]==' '){
我在您的代码中看到2个错误。
if(in[i]=' ')
应该是if(in[i]==' ')
==
检查两个操作数的值是否相等。 如果是,则条件变为真。
=
简单的赋值运算符。 将值从右侧操作数分配到左侧操作数。
i<=cw
应该是i<cw
索引从C中的0开始。
正如Pras所说的,在ifs上通常使用==,因为您正在比较,并且它返回true或false。如果仅使用=,它将在右边插入(插入)一个值。
您应该在检测空格的if语句中使用==代替=。
如果将数字分配给非零值,则赋值运算符= Give始终为true。
等效运算符==实际比较两个数字是否具有相同的值。
赋值运算符实际上可以测试数字是否为零(至少在x860上是令人惊讶的)。这是因为测试指令之一jz会检查包含信息的标志寄存器(特殊的内存位置)关于==执行一次cmp,它将两个数字彼此相减以查看其是否为0。Jz代表“如果为零则跳转”,所以两个相等的数字导致指令的“跳转”当使用=时,编译器改为使用jz(以符合c的想法,即if中的非零数字为true),这将导致上述行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.