华为在线软件测试平台4428题
时间:2014-04-28 06:07:42
收藏:0
阅读:467
今天第一次去那个平台做题,上面的题目很多....难度也分的很清楚.....于是做了一个初级难度的题目,结果将近搞了一个下午才做出来.....
题目大意:在字符串中找出连续最长的数字串
写一个函数,它的原形是int Continumax(char** outputstr,char *intputstr)
功能:
在字符串中找出连续最长的数字串,并把这个串的长度返回,
并把这个最长数字串付给其中一个函数参数outputstr所指内存。
例如:"abcd12345ed125ss123456789"的首地址传给intputstr后,函数将返回9,
outputstr所指的值为123456789
这个题目对我来说难点是指向指针的指针......先上代码,在代码中说明问题....
1 /******************************************************* 2 华为在线软件平台4428题,已经通过 3 ***********************************************************/ 4 #include <iostream> 5 #include <string> 6 using namespace std; 7 unsigned int Continumax(char** pOutputstr, char* intputstr); 8 int main(void) 9 { 10 unsigned int len; 11 char* outputstr=NULL; //指针初始化 12 char*inputstr="abcd12345ed125ss123456789"; 13 len=Continumax(&outputstr,inputstr); //在传递形参时,注意理解,因为传递过去的要是指向指针的指针,因为outputstr是一个指针,那么取它的地址,即是指向指针的指针 14 printf("%s\n",outputstr);//输出时,直接给出头地址即可...碰到\0会作为输出结束符 15 return 0; 16 } 17 unsigned int Continumax(char** pOutputstr, char* intputstr) 18 { 19 int i=0; 20 unsigned int Count=0; 21 unsigned int temp=0; 22 int pos=0; 23 char *last=(char *)malloc(sizeof(char)*(strlen(intputstr)+1));//申明一个临时的char指针,用来存放数字字符串 24 int len=strlen(intputstr); 25 if(!intputstr) 26 { 27 *pOutputstr=""; 28 return 0; 29 } 30 for(i=0;i<len;i++) 31 { 32 if(intputstr[i]>=‘0‘&&intputstr[i]<=‘9‘) 33 { 34 temp++; 35 if(i!=len-1) 36 continue; 37 } 38 39 { 40 if(temp>=Count)//相等的时候可以保证如果最长的是在最后,则输出最后一串 41 { 42 Count=temp; 43 if(i!=len-1)//这里要注意,因为数字字符串可能是在最后,所以要判断一下,如果不是在最后,pos需要减一 44 pos=i-1; 45 else pos=i;//如果在最后,那么不需要减一直接等于最后的下标 46 for(int j=Count-1;j>=0;j--) 47 { 48 last[j]=intputstr[pos];//直接等于临时的指针数组 49 pos-=1; 50 } 51 last[Count]=‘\0‘; 52 } 53 temp=0; 54 } 55 } 56 if(len==0)//如果没有长度,那么直接为空,不能赋值NULL,题目规定 57 { 58 *pOutputstr=""; 59 return 0; 60 } 61 else 62 *pOutputstr=last;//直接将临时指针的头地址复制给指向指针的指针地址...这个是指向指针的指针的使用方法,需要牢记 63 return Count; 64 }
相关注意事项都在程序注释中提到....
评论(0)