/*
题目概述:请设计函数,检测输入字符串中是否包含连续的或者离散的
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是连续还是离散的了~
一道华为上机题
最新推荐文章于 2022-12-10 09:22:51 发布