/* 题目概述:请设计函数,检测输入字符串中是否包含连续的或者离散的 test,test只出现一次。 函数原型:int getTest(char input[]) 函数说明:input为输入的字符串,如果出现连续的test则返 回1,如果出现离散的test则返回2,如果没有出现test或者 出现的次数和顺序不正确,则返回0 测试样例: char in[][30]= { "avvvdtestdkd", "atvvdedskt", "tshihitesst", "testabctesst", "testabcst", "tshihitesst" }; in[0]= avvvdtestdkd getTest(in[0])= 1 in[1]= atvvdedskt getTest(in[1])= 2 in[2]= tshihitesst getTest(in[2])= 0 in[3]= testabctesst getTest(in[3])= 0 in[4]= testabcst getTest(in[4])= 0 in[5]= tshihitesst getTest(in[5])= 0 */ #include <iostream> #include <assert.h> using namespace std; int getTest(char input[]) { assert(input); int position[4]; int flag[26] = {0}; char pattern[] = "test"; int i = 0, j = 0, count = 0; char *p1 = input; while (*p1!='\0') { if (*p1=='t') ++count; ++p1; } if (count!=2) return 0; char *p2 = input; count = 0; bool begin = false; while (*p2!='\0') { if (*p2=='t') ++count; if (count==1) begin = true; else begin = false; if (begin) { switch (*p2-'a') { case 't'-'a': ++flag['t'-'a']; break; case 'e'-'a': ++flag['e'-'a']; break; case 's'-'a': ++flag['s'-'a']; break; default: break; } } ++p2; } if (flag['e'-'a']>1 || flag['s'-'a']>1) return 0; memset(flag, 0, 26*sizeof(int)); char *p3 = input; int k = 0; while (*p3!='\0') { if (*p3==pattern[j]) { position[k++] = i; ++j; } ++i; ++p3; } if (position[3]-position[2]==1 && position[2]-position[1]==1 && position[1]-position[0]==1) return 1; else return 2; } int main(int argc, char **argv) { char in[][30]= { "qtestwerssees", "atvvdedskt", "tshihitesst", "testabctesst", "testabcst", "tshihitesst" }; for (int i=0; i<6; ++i) { cout<<getTest(in[i])<<endl; } system("pause"); return 0; }若字符串中出现1个t或者3,4,5...个t都是不符合条件的,返回0;若是出现两个t就统计两个t中间e和s出现的次数,次数大于1次的也不符合条件返回0。把上面两种情况去掉以后就可以分析test是连续还是离散的了~