今天第一次去那个平台做题,上面的题目很多....难度也分的很清楚.....于是做了一个初级难度的题目,结果将近搞了一个下午才做出来.....
题目大意:在字符串中找出连续最长的数字串
写一个函数,它的原形是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 }
相关注意事项都在程序注释中提到....
华为在线软件测试平台4428题,布布扣,bubuko.com
时间: 2024-12-17 18:03:08