在c中计算字符程序

时间:2010-05-17 14:12:41

标签: c

字符编号的输出是实际编号。加3。 我不知道为什么?

这是代码:

void main(void)
{

 int ch,w=0,c=0;
 do
 {
  ch=getche();
  ++c;
  if(ch==32)
  {
      ++w;
      ++c;
  }

 }while(ch!=13);
 printf("\nnum of characters is  %d",c);
 printf("\nnum of words is  %d",w);
        getch();
}

9 个答案:

答案 0 :(得分:7)

您为空格字符递增c 两次

您的if声明应该只是:

if(ch==32)
    ++w;

你还有另一个微妙的错误,因为字符串 h e l l o SPC SPC ħ 电子 - [R e (带两个空格)将在您的代码中注册为三个单词。

这就是 I 编写它以避免这些问题的方式。请注意使用lastch来避免将空格序列计为多个单词。

int main(void) {
    int ch = ' ', lastch, w = 0, c = 0;

    do {
        lastch = ch;
        ch = getchar();
        ++c;
        if (ch == ' ') {
            if (lastch != ' ') {
                ++w;
            }
        }
    } while (ch != '\n');

    if (lastch != ' ') {
        ++w;
    }

    printf("num of characters is  %d\n",c);
    printf("num of words is  %d\n",w);

    return 0;
}

答案 1 :(得分:4)

你是重复计算空间:

++c;
if(ch==32)
{
    ++w;
    ++c;
}

你已经增加了c;你不需要再做一次。你还把换行计算为一个字符,你的字数是空格数的计数,它将是短的一个(“foo bar”有两个单词,但是一个空格)。根据您想要检查的内容,isspace之类的标准函数可能更容易(但对于除''之外的其他函数返回true)

答案 2 :(得分:3)

  ++c;
  if(ch==32)
  {
      ++w;
      ++c;
  }

你已经对空格字符进行了重复计算。删除第二个++c

答案 3 :(得分:3)

每个空间都被计算两次......

  ++c;
  if(ch==32)
  {
      ++w;
      ++c; // char is counted again
  }

将代码更改为:

  ++c;
  if(ch==32)
  {
      ++w;     
  }

答案 4 :(得分:3)

c时,您要加ch==32两次。此外,您在c时添加ch==13

答案 5 :(得分:2)

你计算两次空间。

如果您使用ch==' '而不是ch==32等字符文字,也会更容易阅读

答案 6 :(得分:2)

如果读取的字符为32,则递增c两次。

答案 7 :(得分:1)

每个空间计算两次

答案 8 :(得分:0)

void main(void)
{
    int ch,w=0,c=0,lastch=32;
    while((ch = getche()) != 13) //get input and check if it's ENTER key
    {
        ++c;
        if(ch == 32 && lastch != ch) //make sure two continuous spaces are not counted as a word as pointed out by paxdiablo
            ++w;
        lastch = ch;
    }
    if(lastch != 32) //for a word with no space
        ++w;
    printf("\nnum of characters is  %d",c);
    printf("\nnum of words is  %d",w);
    getch();
}

您可以考虑使用char而不是int。