如何找到任何字符的立即重复?

时间:2018-12-06 14:28:20

标签: c if-statement char

我希望我的程序查找任何字符的所有立即重复字符。例如,如果输入为“ APAMMANNA” ,我希望程序对出现的立即重复字符进行计数。因此,对于给定的示例,输出应为“ 2”

我已经编写了这段代码

#include<stdio.h>
int main()
{
    char input[51];

    int n, i, count=0;

    scanf("%d",&n);

    for(i=0;i<n;i++)
    {
        scanf("%c",&input[i]);
    }

    for(i=0;i<n;i++)
    {
        if(input[i]==input[i+1]);
            count++;
    }

    printf("%d\n",count);
}

但是我这个程序似乎不起作用,有人可以告诉我为什么这个程序不能比较以下条件吗?

  

if(input [i] == input [i + 1]);

那么,有人可以帮助我找出我要去哪里的地方吗?

2 个答案:

答案 0 :(得分:4)

问题在这里

if(input[i]==input[i+1]);
    count++;

这总是增加count。这是因为该分号。相反,它应该是:

if(input[i]==input[i+1])
    count++;

之所以不起作用,是因为使用分号,分号(不执行任何操作)是if语句的整个主体。这就是为什么计数总是增加的原因,因为count++;不是if的一部分。

  

例如,如果输入为“ APAMMANNA”

实际上,它必须类似于“ 10 APAMMANNA”,因为您首先要读n,而且即使那样,它还是有点难看,因为数字后的空格将成为您字符串的一部分。 / p>

答案 1 :(得分:3)

首先,在存储字符串时,请避免使用scanf,而应使用fgets。我不明白为什么您要询问字符串的长度,您可以使用strlen获得它。在您的if语句之后还有一个多余的分号,它将使count++不是该语句的一部分,因此将始终执行(即使该语句为假)。

#include<stdio.h>
#include <string.h>

int main()
{
    char input[51];
    int n, i, count=0;

    fgets(input,51,stdin);
    n=strlen(input);

    for(i=0;i<n-1;i++)
    {
        if(input[i]==input[i+1]) 
            count++;
    }

    printf("%d\n",count);
}