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

时间:2017-05-17 11:08:22

标签: c string

我是C的初学者。我正在尝试打印用户输入的字符串中的长度和单词数。我在处理单词计数方面遇到了麻烦。我尝试扫描空格字符的编号,然后在结果中添加1。保证每个单词只用一个空格分隔。

我执行了代码,并输入了

I go to school by bus.

第二个输出不是我预期的

22
24

22是正确的,因为它确实是字符串的长度,但我不明白为什么它打印24而不是6(5个空格加1的结果)。< / p>

代码如下

#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;
}

出了什么问题,我怎样才能得到正确的输出?

4 个答案:

答案 0 :(得分:4)

if(in[i]=' '){

永远是真的,您需要将其更改为

if(in[i]==' '){

答案 1 :(得分:4)

我在你的代码中看到的2个错误。

  1. if(in[i]=' ')应为if(in[i]==' ')
  2.   

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

         

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

    1. i<=cw应为i<cw
    2.   

      索引在C中从0开始。

答案 2 :(得分:2)

正如Pras所说,如果您通常使用==,因为您正在比较并返回true或false 如果您只是使用= it属性(插入)左侧右侧的值。

答案 3 :(得分:0)

您应该在检测空间的if语句中使用==而不是=。

如果数字被赋值为非零值,赋值运算符,= give始终为true。

等价运算符,==实际上是比较两个数字是否具有相同的值。

可能令人惊讶的是,赋值运算符实际上可以测试一个数是否为零(至少在x860上。这是因为jz,其中一个测试指令,检查一个称为标志寄存器的东西(一个特殊的存储位置)它包含有关最近执行的算术运算的信息。==执行一个cmp,它相互减去两个数字以查看它是否为0. Jz代表“如果为零则跳转”,因此两个相等的数字导致“跳转” if语句中的指令。当使用=时,编译器使用jz代替(为了符合if中的非零数字为if的想法),这导致上述行为。