我怎样才能找到任何字符的立即重复?
Posted
技术标签:
【中文标题】我怎样才能找到任何字符的立即重复?【英文标题】:How can i find immediate repeat of any char? 【发布时间】:2019-05-08 06:41:47 【问题描述】:我希望我的程序找到任何字符的所有立即重复。例如,如果输入是“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);
但是我这个程序似乎不起作用,谁能告诉我为什么这个程序不能比较以下条件?
如果(输入[i]==输入[i+1]);
那么,谁能帮我找出我哪里出错了?
【问题讨论】:
“ABABBABBBABBBBA”的输出应该是什么?那么“ABBBAAAA”呢? 对于初学者,请添加printf("%s\n", input);
以查看实际内容。
当 i==(n-1) 并且您尚未定义最后一个条目时,您将使用“i+1”结束字符串的末尾。此外,您不想要“;”在“如果”之后!
@Broman 他们无法打印出input
,因为它不是NUL
终止的字符串
@ChrisTurner 好吧,只需将 print 语句修改为有限长度。总之就是基本调试。
【参考方案1】:
问题来了
if(input[i]==input[i+1]);
count++;
这总是增加count
。这是因为那个分号。相反,它应该是:
if(input[i]==input[i+1])
count++;
它不起作用的原因是因为使用分号,分号(什么都不做)是if
语句的整个主体。这就是为什么计数总是增加的原因,因为count++;
不是if
的一部分。
例如,如果输入是“APAMMANNA”
实际上,它必须是“10 APAMMANNA”之类的内容,因为您首先阅读的是n
,即使这样,它也有点难看,因为数字后面的空格将成为您字符串的一部分。
【讨论】:
忘记写示例中的第一个输入是 int,不过感谢您的帮助。我现在可以理解了,我在哪里犯了错误。【参考方案2】:首先,避免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);
【讨论】:
以上是关于我怎样才能找到任何字符的立即重复?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 chr() 返回一个十六进制值,我怎样才能让它只返回字符 [重复]
我怎样才能写出'n'字符串的所有组合?重复:C=n!/(n-k)! [关闭]