题目: 实现函数 int maxContinuNum(const char*inputstr.char*outputstr)
功能:在以‘\0’结尾的字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr所指内存。不能用strlen之类的库函数。
解题思想: 顺序遍历整个字符串,找出每个连续的数字串,每次找到一个后,与前一个进行比较,保留最长的连续数字串的起始地址和数字串的长度。初始状态是maxCount=0,maxBegin=NULL
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
//判断是否是字符
bool isDigital(const char ch)
{
return (ch>='0' && ch<='9');
}
int maxContinueNum(const char* inputstr,char* outputstr)
{
const char* preBegin = NULL; //记录当前的数字串的地址
const char* maxBegin = NULL; //记录最长的数字串的起始地址
int preCount = 0; //记录当前数字串的长度
int maxCount = 0; //记录最大数字串的长度
const char* str = inputstr; //引入变量
for(;*str != '\0';++str)
{
//当前长度每次找连续数字串的时候初始化为0
preCount = 0;
if(isDigital(*str))
{
preBegin = str; //起始地址
preCount++;
//判断后面是否也是数字字符
while(isDigital(*++str))
{
preCount++;
}
}
//找出最大的连续字符串
if(preCount > maxCount)
{
maxCount = preCount;
maxBegin = preBegin;
}
}
//将最大连续数字串保存到outputstr中
for(int j=0;j<maxCount;++j)
*(outputstr+j) = *(preBegin+j);
return maxCount;
}
int main()
{
//测试用例
char *inputstr = "hello123world456789over1245664mm";
char *outputstr = (char*)malloc(50);
memset(outputstr,0,50);
int count = maxContinueNum(inputstr,outputstr);
printf("The longest digital string is: ");
puts(outputstr);
printf("The length is: %d\n",count);
free(outputstr);
system("pause");
return 0;