找出两个或者多个字符串中最大的公共串,最大的整数,最长的整数

来源:互联网 发布:js dom loaded 编辑:程序博客网 时间:2024/06/06 09:08

一 找出两个字符串中最大的公共字串

#include "stdio.h"      #include "malloc.h"      #include "string.h"          char *maxsubstr(char *str1, char *str2)    {       char *p1, *p2, *q1, *q2, *destp;       char *substr;       int max = 0, len;       p1 = str1;       while(*p1 != '\0')       {           q1 = str2;           while(*q1 != '\0')           {              len = 0;  //这部分初始化非常重要,要注意好!             p2 = p1;              q2 = q1;              while((*p2 != '\0')&&(*q2 != '\0'))              {                  if(*p2 == *q2)                  {                      p2 ++;q2 ++;len ++;                  }                  else                  {                     break;                  }              }              if(len > max)              {                  max = len;                  destp =p1;              }              q1++;           }           p1++;       }       substr=(char*)malloc(sizeof(char)*max);       strncpy(substr,destp,max);       substr[max] = '\0';     return substr;    }       int main()    {      char *s1="aocdfe";      char *s2="pmcdfa";      char *sub;      printf("%s\n%s\n",s1,s2);      sub = maxsubstr(s1,s2);      printf("the max sub string is:%s\n",sub);       return 0;    }   

多个字符串最大的公共子字符串

#include <iostream>#include <string>using namespace std;//将第一个字符串与最短的字符串交换void swap(string *pStr,int i){    string temp;    temp = *pStr;    *pStr = *(pStr + i);    *(pStr + i) = temp;}char* findSameSubStr(char**asd, int N){int i,j,k,len,min,maxLen = 0,minLen = 256;string maxStr,tmpStr,*pStr = new string [N];       //找出输入的字符串中长度最小的串,并把最小串序号记在min中    for(i = 0; i < N; ++ i){        *(pStr + i) = asd[ i ];// *操作符与调用函数的.操作符优先级问题,.优先级高于*,所以必须加上()        len = (*(pStr +i)).length();//find the minimal length of the string        if( len < minLen){   minLen = len;            min = i;        }    }//swap the string and put the minimal string in the first//printf("the minimal length string = %d\n",min);    swap(pStr,min);        len = pStr[0].length();       for(i = 0; i < len && maxLen <= len - i - 1; ++ i)    {        for(j = 0; j < len && maxLen <= len - i - j - 1; ++ j)        {//对字符串数组中第一个子串,求出其可能的子串值,如果剩余子串长度小于maxLen则不用去求了,for循环中给出了限制            tmpStr = pStr[0].substr(i, len - j);            //将子串tmpStr与参与匹配的字符串比较,判断tmpStr是否为剩余串的子串,如果不是则break出循环            for(k = 1; k < N; ++ k)            {                string::size_type pos = pStr[k].find(tmpStr);                if(pos < pStr[ k ].length())                    continue;                else                    break;            }            if(k == N)//说明子串tmpStr是其他参与匹配的子串的子串            {                if(tmpStr.length() > maxLen)//tmpStr如果是当前最大的子串,则记录下来                {                    maxLen = tmpStr.length();                    maxStr = tmpStr;                }            }        }    }char * maxstr = new char [maxStr.length() + sizeof(char)];strcpy(maxstr,maxStr.c_str());    delete []pStr;return  maxstr;}int main(){    int N = 3;  /*    string *pStr;    pStr = new string [N];pStr[0] = "main what is local bus";pStr[1] = "main this is local bus";//pStr[2] = "local bus is name sdhfj";pStr[2]  = "main";*///char *asd[ 3 ] = {"main what is local bus","main this is local bus","main my name is tian mo thank you very much"};char *asd[ 3 ] = {"mainttianmomomo","hthhttmainttgggsdjfsjdfsdf","fsadfasdfsamainttoewrowjfjsjfldsmflasjdfljslfls"};printf("最大公共子串为:%s\n",findSameSubStr(asd, N));       return 0;}

二 找出字符串中最大的整数

int _FindMaxData(const char *str){if(NULL == str)return 0;    int temp, flag, max = 0;const char *p = str;    while ('\0' != *p)    {        temp = 0;        flag = 0;//设置是否有整数的标志        while (*p >= '0' && *p <= '9')        {            temp = 10 * temp + *p - '0';            ++ p;            flag = 1;        }        if (flag)        {if(max < temp){max = temp;}                        -- p;//由于在存整数的时候多走了一步,要减1        }        ++ p;    }return max;}void main(){char str[] = "A5C6B9572DDEF6912YY9573GG12345II001234";printf("max = %d\n",_FindMaxData(str));}

三 找出字符串中最大的由0-9组成的串

int _FindMaxData(const char *str){if(NULL == str)return 0;    int temp, flag, max = 0;const char *p = str;    while ('\0' != *p)    {        temp = 0;        flag = 0;//设置是否有整数的标志        while (*p >= '0' && *p <= '9')        {            //temp = 10 * temp + *p - '0';temp ++;            ++ p;            flag = 1;        }        if (flag)        {if(max < temp){max = temp;}                        -- p;//由于在存整数的时候多走了一步,要减1        }        ++ p;    }return max;}void main(){char str[] = "A5C6B9572DDEF6912YY9573GG12345II001234";printf("max = %d\n",_FindMaxData(str));}

四 


待续 。。。 

原创粉丝点击