首页 > 代码库 > 华为在线软件测试平台4428题

华为在线软件测试平台4428题

今天第一次去那个平台做题,上面的题目很多....难度也分的很清楚.....于是做了一个初级难度的题目,结果将近搞了一个下午才做出来.....

题目大意:在字符串中找出连续最长的数字串

写一个函数,它的原形是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 }

相关注意事项都在程序注释中提到....