我希望我的程序查找任何字符的所有立即重复字符。例如,如果输入为“ 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]);
那么,有人可以帮助我找出我要去哪里的地方吗?
答案 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);
}