我正在使用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;但我不知道怎么做。
我是新手,也是编程新手。我希望我能更好地解释。我希望你能帮帮我。谢谢。
答案 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';
}