如何统计连续出现两次的字符

时间:2015-11-20 09:26:28

标签: c++ string windows

我正在使用C ++。到目前为止,我的代码是这样的:

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

int main() {
    char word[100]; int ctr, count = 0;
    printf("Enter string: "); gets(word);

    ctr = 1;
    while (word[ctr] != '\0') {
        if (word[ctr-1] == word[ctr]) count++;
        ctr++;
    }

    printf("%d", count);
    return 0;
}

示例运行

Enter string: mississippi
3

Enter string: mmmmrrnzzz
6

我已经正确运行了第一个样本(密西西比),只有3个字符连续两次出现,但第二次样本运行(mmmmrrnzzz)没有出现输出6。

我的问题是,它不应该是6而是4。前两个连续m为1,后两个连续m为1,r为1,z为1。我想要第一个&#34; mm&#34;第二个&#34; mm&#34;而且对于&#34; zz&#34;但我不知道怎么做。

我是新手,也是编程新手。我希望我能更好地解释。我希望你能帮帮我。谢谢。

4 个答案:

答案 0 :(得分:2)

如果是mmmm这样的多对夫妻,你需要对你的计数器进行双倍增加:

#include <stdio.h>
#include <string.h>
int main() 
{
    char word[100]; 
    int ctr;
    int count = 0;
    printf("Enter string: "); 
    gets(word);
    int len = strlen(word);
    ctr = 1;
    while (ctr<len) {
        if (word[ctr-1] == word[ctr]) 
        {
            count++;
            ctr++;
        }
        ctr++;
    }

    printf("%d", count);
    return 0;
}

答案 1 :(得分:2)

首先,该程序看起来像一个C程序。实际上你并没有使用C ++。你正在使用C. :)至少在C ++中你应该使用标题

ActiveSheet.Shapes("Button 1").Select 
Selection.Characters.Text = "My New Caption"

而不是

#include <cstdio>

等等。

而且它有一个bug,因为通常字符串可以为空。在这种情况下,循环的条件会跳过第一个零终止字符,并且程序具有未定义的行为。

这是一种正确的方法

#include <stdio.h>

输出

#include <stdio.h>

int main( void )
{
    const char *s = "mmmmrrnzzz";

    size_t count = 0;

    while ( *s++ )
    {
        if ( *s == *( s - 1) )
        {
            ++count;
            ++s;
        }
    }

    printf( "count = %zu\n", count );
}

考虑到函数count = 4 不安全,不再受C(或C ++)标准支持。

您应该使用函数gets而不是fgets

答案 2 :(得分:1)

这将有效

#include <stdio.h>
#include <string.h>
int main() {
    char word[100]; int ctr, count = 0;
    printf("Enter string: "); gets(word);
    int len=strlen(word);
    ctr = 1;
    while (ctr<len) {
        if (word[ctr-1] == word[ctr]) 
        {
        count++;
        ctr++;
        }
        ctr++;
    }

    printf("%d", count);
    return 0;
}

答案 3 :(得分:0)

标准库版本:

#include <algorithm>
#include <iostream>
#include <string>


int main()
{
  int count{};
  std::string s;
  std::cin >> s;

  for (auto it = s.begin(); (it = std::adjacent_find(it, s.end())) != s.end(); it += 2)
    ++count;

  std::cout << count << '\n';
}