• 华为在线软件测试平台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
    ",outputstr);//输出时,直接给出头地址即可...碰到会作为输出结束符 
    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]='';
    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 }

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

  • 相关阅读:
    图的广度优先遍历
    马踏棋盘算法(骑士周游问题) 数据结构和算法60
    马踏棋盘算法(骑士周游问题) 数据结构和算法60
    图的遍历(广度优先遍历) 数据结构和算法61
    图的遍历(广度优先遍历) 数据结构和算法61
    从零开始学习Sencha Touch MVC应用之十
    从零开始学习Sencha Touch MVC应用之十一
    从零开始学习Sencha Touch MVC应用之七
    从零开始学习Sencha Touch MVC应用之六
    从零开始学习Sencha Touch MVC应用之十三
  • 原文地址:https://www.cnblogs.com/kb342/p/3694897.html
Copyright © 2020-2023  润新知