在序列中找到符合某个条件的子序列

来源:互联网 发布:云端软件平台下载 编辑:程序博客网 时间:2024/05/16 16:04
// 在序列中找到符合某个条件的子序列 #include <iostream>using namespace std;int continumax(char *outputstr,char *inputstr);int main(){  char* str = "sadf2440353adfafd1212sfol;49018498";  //DEV C++和win7编译能过但运行就会挂;   //实现有两种:char *str会把字符串当成常量;某些实现和java类似,str只有一个副本,更改会产生第二个副本   // str[3] = 'A';      char outputstr[100] = {};    int n = continumax(outputstr,str);  cout<<n<<"   "<< outputstr;      cin.get();  }int continumax(char *outputstr,char *inputstr){   int max = 0;   char* start = 0,*end=0; // used for search   if(!inputstr) //null pointer      return 0;   while(*inputstr!='\0')   {     if(*inputstr<'0'||*inputstr>'9')     {       if(max<end-start+1&&start!=0)       {         max = end-start+1;         for(char* iter=start;iter<=end;iter++)           outputstr[iter-start] = *iter;                                   }         start = end = 0;     }else     {       if(start==0&&end==0)         start = end = inputstr;       else            end = inputstr;          }          inputstr++;     if(*inputstr=='\0')     {         if(max<end-start+1&&start!=0)       {         max = end-start+1;         for(char* iter=start;iter<=end;iter++)           outputstr[iter-start] = *iter;                                   }                       }                                   }   return max;   }

从头开始往后循环,如果是非数字有两种情况,前面已经有起始点(start!=0)则表示找到一个序列看是否更长是就记录同时清空找到的序列位置,前面没有起始点则在排序不符合条件的序列什么都不干。

如果是数字则判断是否已经记录起始点,是则end++记录这个序列到底多长,不是则这个点是起始点start=end=这个点的位置。


原创粉丝点击