求最大连续递增数字串

求最大连续递增数字串

http://blog.sina.com.cn/s/blog_5dc7bbf80100v77b.html

#include<stdio.h>

int GetSubString(char* strSource,char* strResult)
{
 int iTemp = 0,iHead = 0,iMax = 0;

 

 for(int Index = 0,iLen = 0;strSource[Index];Index++)
 {
  if(strSource[Index] >= '0' && strSource[Index] <= '9' && strSource[Index] == strSource[Index - 1] +1)C面试算法解析
  {
   iLen++;
  }
  else
  {
   if(iLen > iMax)
   {
    iMax = iLen;
    iHead = iTemp;
   }

   if(strSource[Index] >= '0' && strSource[Index] <= '9')
   {
    iTemp = Index;
    iLen = 1;
   }
  }
 }

 for(iTemp = 0;iTemp < iMax;iTemp++)
 {
  strResult[iTemp] = strSource[iHead++];
 }
 strResult[iTemp] = '\0';
 
 return iMax;
}

int main(int argc,char* argv[])
{
 char strSource[] = "ads3s13456789DF34561d345AA";
 char strResult[sizeof(strSource)];

 printf("Len =%d,strResult=%s\nstrSource=%s\n",GetSubString(strSource,strResult),strResult,strSource);
}

 

// ContinuousIncreasing.cpp : Defines the entry point for the console application.
//求最大连续递增数字串

#include "stdafx.h"
#include<stdio.h>
#include<string.h>

bool inline isNum(char c)
{
    return (c >= '0') && (c<='9');
}

bool inline isContinuous(char* p)
{
    return (*p)==(*(p-1) + 1);
}

int GetSubStr(char* strSource,char* strResult)
{
    char * buff=new char[strlen(strSource)];
    int iMaxLen=0;
    int iLen=0;
    
    char *p=strSource;

    bool bCounting=false;
    char *pStartPos;
    while (*p)
    {
        if ( isNum(*p) )
        {
            if (bCounting==false)
            {
                bCounting=true;
                iLen=1;
                pStartPos=p;
            } 
            else
            {
                if(isContinuous(p))
                {
                    iLen+=1;
                }
                else
                {
                    bCounting=false;
                    if (iLen > iMaxLen)
                    {
                        iMaxLen=iLen;
                        strncpy(buff,pStartPos,iLen);
                        buff[iLen]='\0';
                    }                    
                    continue;
                }
            }
        }
        else if (bCounting)
        {
            bCounting=false;
            if (iLen > iMaxLen)
            {
                iMaxLen=iLen;
                strncpy(buff,pStartPos,iLen);
                buff[iLen]='\0';
            }
        }

        p+=1;

    }
    //
    strcpy(strResult,buff);
    delete[] buff;
    return iMaxLen;
}


int GetSubString(char* strSource,char* strResult)
{
    int iTemp = 0,iHead = 0,iMax = 0;
    //
    int Index = 0,iLen = 0;
    for(;strSource[Index];Index++)
    {
        if( isNum(strSource[Index])    )//C面试算法解析
        {
            if ( isContinuous(strSource+Index) )
            {
                iLen++;
            } 
            else
            {
                if(iLen > iMax)
                {
                    iMax = iLen;
                    iHead = iTemp;
                }

                iTemp = Index;
                iLen = 1;
            }            
        }
        else
        {
            if(iLen > iMax)
            {
                iMax = iLen;
                iHead = iTemp;
            }
        }
    }
    
    for(iTemp = 0;iTemp < iMax;iTemp++)
    {
        strResult[iTemp] = strSource[iHead++];
    }
    strResult[iTemp] = '\0';
    
    return iMax;
}

void main(int argc,char* argv[])
{
    char strSource[] = "ads3s1345678DF34561d3456789AA";
    char strResult[sizeof(strSource)-1];
    
    printf(" Len =%d,strResult=%s\n  strSource=%s\n",GetSubString(strSource,strResult),strResult,strSource);
    //printf(" Len =%d,strResult=%s\n  strSource=%s\n",   GetSubStr(strSource,strResult),strResult,strSource);

}

 

posted @ 2018-03-23 15:33  sky20080101  阅读(187)  评论(0)    收藏  举报