如果至少有七个相同的字符,我的目标是在控制台上打印“YES”字样。这是我的代码,我不明白为什么它运行此输入:“1000000001”但它不适用于“00000001”或“100000001”。求助。
#include <iostream>
#include <cstdio>
using namespace std;
string cad1;
int cont=1;
int main(){
cin >> cad1;
for(int i=1;i<cad1.length();i++){
if(cad1[i] == cad1[i-1]){
cont++;
}else{
cont=1;
}
}
if(cont >= 7){
cout << "YES" << endl;
}else{
cout << "NO" << endl;
}
cin.get();
}
答案 0 :(得分:3)
您正在测试它是错误的,您将该值与前一个值进行比较。所以这个字符串:
1 0 0 0 0 0 0 0 1
评估:(F =假,T =真)
1 0 0 0 0 0 0 0 1
F T T T T T T F
每个T
或F
都是测试上述两个字符的结果。
计算T,有6个。你需要重新考虑你的测试。
这样的一些代码可能有所帮助:
char current = 0;
int length = 1;
bool foundSeven = false;
for(int i = 0; i < cad1.length(); i++) {
if(current == cad1[i]) {
length++;
} else {
length = 1;
}
current = cad1[i];
if(length == 7) {
foundSeven = true;
break;
}
}
答案 1 :(得分:1)
您的代码对我来说不适用于“1000000001”。如果你删除最后一个它是有效的。 当计数器达到7时,放下休息,它会起作用。
答案 2 :(得分:0)
虽然它已经回答了,但这是使用strtok
的另一种方式(在处理字符串操作时进行操作)
#include <stdio.h>
#include <string.h>
int main ()
{
char str[] ="1000000001";
char * pch;
int count =0;
for(pch = strtok(str, "1"); pch!=NULL; pch = strtok( NULL, "1"))
{
//printf("\n%s\n",pch);
count+=strlen(pch);
}
printf("\ntimes -%d", count);
return 0;
}