这一题,简单的字符串处理。只是题目的要求比较麻烦。
题目的大概意思是:给你一段字符串,判断是否可以被接受。
判断的条件为:
1.存在一个元音。(元音有a,e,i,o,u)
2.不能有连续的三个元音或者连续的三个非元音。
3.不能有连续的两个相同字符除了e和o可以之外
有了这些条件,就很容易了。
下面的是一次AC的代码,有详细的注释:
#include <iostream> #include <cstring> using namespace std; int main() { char str[25]; int tag[25], flag[25]; //tag数组是来判断是否有三个元音连续和非元音连续,flag数组判是否有两个相同字符连续 while(cin >> str) { if(strcmp(str, "end") == 0) //结束标记 break; int len = strlen(str); memset(tag, 0, sizeof(tag)); //初始化两个数组 memset(flag, 0, sizeof(flag)); for(int i = 0; i < len; i++) { if(str[i] == 'a' || str[i] == 'e' || str[i] == 'i' || str[i] == 'o' || str[i] == 'u') { tag[i] = 1; //是元音,标记该位置为1; if(i > 0 && (str[i - 1] == 'a' || str[i - 1] == 'e' || str[i - 1] == 'i' || str[i - 1] == 'o' || str[i - 1] == 'u')) //如果它的上一个位置为1,相加起来 { //最后判断是否有3出现,就可以知道是否有3个元音连续 tag[i] += tag[i - 1]; } } else //同理,非元音也是,只是是判-3而已 { tag[i] = -1; if(i > 0 && !(str[i - 1] == 'a' || str[i - 1] == 'e' || str[i - 1] == 'i' || str[i - 1] == 'o' || str[i - 1] == 'u')) { tag[i] += tag[i - 1]; } } if(i > 0 && str[i] == str[i - 1] && (str[i] != 'e' && str[i] != 'o')) //判是否有两个相同的连续 flag[i] = 1; } int a, b, c, d; a = b = c = d = 0; for(int j = 0; j < len; j++) { if(tag[j] == 1) //判是否存在元音 a = 1; if(tag[j] == 3) //判是否存在三个元音连续 b = 1; if(tag[j] == -3) //判是否存在三个非元音连续 c = 1; if(flag[j] == 1) //判是否存在两个相同的字符连续,除e和o的 d = 1; } if(a == 1 && b == 0 && c == 0 && d == 0) cout << '<' << str << '>' << " is acceptable." << endl; else cout << '<' << str << '>' << " is not acceptable." << endl; } return 0; }
时间: 2024-12-09 18:11:29