我怎样才能找到任何字符的立即重复?

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)! [关闭]

我怎样才能使元素居中[重复]

我怎样才能从任何地方在我的系统上运行我的脚本(当前目录之外)? [重复]

我怎样才能得到一个值的二进制表示[重复]

检查字符串中的 4 个句点 [重复]