【问题标题】: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 语句修改为有限长度。总之就是基本调试。

标签: c if-statement char


【解决方案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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-14
    • 2023-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-24
    相关资源
    最近更新 更多