编写一个程序,该程序从用户那里接收一个由字母“ a”和“ b”组成的字符串,该字符串长10个字符(每个字符必须分别读取)。如果输入处有abba序列,则程序还应检测到信号。 (为此,您不能使用数组和排序)我有一个类似的选项,但是不合适:
void abba();
int main()
{
abba();
return 0;
}
void abba()
{
int a, b, c, d, e, f, g, h, k, l;
printf("Enter 10 characters");
scanf_s("%c", &a);
scanf_s("%c", &b);
scanf_s("%c", &c);
scanf_s("%c", &d);
scanf_s("%c", &e);
scanf_s("%c", &f);
scanf_s("%c", &g);
scanf_s("%c", &h);
scanf_s("%c", &k);
scanf_s("%c", &l);
if (a == 'a' && b == 'b' && c == 'b' && d == 'a')
printf("'abba' is found!");
if (b == 'a' && c == 'b' && d == 'b' && e == 'a')
printf("'abba' is found!");
if (c == 'a' && d == 'b' && e == 'b' && f == 'a')
printf("'abba' is found!");
if (d == 'a' && e == 'b' && f == 'b' && g == 'a')
printf("'abba' is foun d!");
if (e == 'a' && f == 'b' && g == 'b' && h == 'a')
printf("'abba' is found!");
if (f == 'a' && g == 'b' && h == 'b' && k == 'a')
printf("'abba' is found!");
if (g== 'a' && h == 'b' && k == 'b' && l == 'a')
printf("'abba' is found!");
}
答案 0 :(得分:1)
如果不能使用数组,则可以使用标志来了解到目前为止所读的内容以及接下来要获得所需序列的期望字符。代码为:
void abba(){
int i = 0; //chars read counter
int j = 0; //sequence counter "a" = 1, "ab" = 2, "abb" = 3, "abba" = 4
int flag = 0; //set to 1 if j hits 4
char a;
printf("Enter 10 characters\n");
while(i<10){
scanf_s(" %c",&a);
i++; if(i>10)break;
if(a == 'a'){
if(j==3){
j++;
flag=1;
}
else j=1;
}
else if(a == 'b' && (j==1 || j==2)){
j++;
}
else{
j=0;
}
}
if(flag==1){
printf("abba found!");
}
else printf("not found");
}