繁体   English   中英

计算字符串中单词的长度和数量

[英]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个错误。

  1. if(in[i]=' ')应该是if(in[i]==' ')

==检查两个操作数的值是否相等。 如果是,则条件变为真。

=简单的赋值运算符。 将值从右侧操作数分配到左侧操作数。

  1. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM