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

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

#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));
}

四 


待续 。。。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值