求最大连续递增数字串
求最大连续递增数字串
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)
{
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); }

浙公网安备 33010602011771号