/*
题目:在字符串中找出连续最长的数字串,并把这个串的长度返回
函数原型:
unsignedint Continumax(char** pOutputstr, char* intputstr)
输入参数:
char* intputstr 输入字符串;
输出参数:
char** pOutputstr: 连续最长的数字串,如果连续最长的数字串的长度为0,
应该返回空字符串;如果输入字符串是空,也应该返回空字符串;
返回值:
连续最长的数字串的长度
输出格式:
1.如果输入空串,则只输出空串;
2.如果字符串中只有字母,数字个数为0,则只输出0;
3.如果输入字串中有多个相同长度的数字字串,那么依次输出这些字串,
用逗号隔开,在最后输出这些字串的长度,如输入132ab123 那么 输出 132,123,3
解决思路:
逐个字符遍历,当遇到数字时,计算连续数字的个数并保存数字子串,
如果个数大于之前出现的数字子串,则保存新的数字子串
难点:二级指针作形参
一级指针地址赋给二级指针。二级指针元素遍历用: *(*pOutputstr+i)
*/
法一:运用指针运算,减少变量的定义
unsigned int Continumax(char** pOutputstr, char* inputstr)
{
char* temp=NULL;
char* last=NULL;
int max=0;
*pOutputstr=(char*)malloc(sizeof(char)*30);
if(inputstr==NULL||* inputstr==0)
{
**pOutputstr='\0';
return 0;
}
while(*inputstr!='\0')
{
if(*inputstr>='0'&&*inputstr<='9')
{
temp=inputstr;
while(*inputstr>='0'&&*inputstr<='9')
{inputstr++;}
if(max<=(inputstr-temp))
{
max=(inputstr-temp);
last=temp;
}
//if(max!=0)
inputstr--;
}
inputstr++;
}
if(max==0)
{
**pOutputstr='\0';
return 0;
}
int i;
for ( i = 0; i < max; ++i)
{
*(*pOutputstr+i)=*(last+i);
}
*(*pOutputstr+i)='\0';
return max;
}
int main()
{
char input[100];
cin.getline(input,100);
char *out=NULL;
int n;//最大长度
n=Continumax(&out,input);
if(input[0]=='\0')
cout<<input[0]<<endl;
else if(n==0)
cout<<n<<endl;
if(n!=0)
{
cout<<out<<","<<n<<endl;
}
free(out);
}
法二:此方法有内存泄露问题,在调用函数中释放指针结果会有错。不释放就会产生泄露。还未解决。
unsigned int Continumax(char** pOutputstr, char* inputstr)
{
*pOutputstr=(char*)malloc(sizeof(char)*30);
if(inputstr==NULL)
{
**pOutputstr='\0';
return 0;
}
int i=0,j=0;
int len=0;//每个数字串的长度
char *p=NULL;
char *temp=NULL;
temp=(char*)malloc(sizeof(char)*30);
while(inputstr[i]!='\0')
{
if(inputstr[i]>='0'&&inputstr[i]<='9')
{
p=inputstr+i;
for(j=i;;j++)
if(inputstr[j]<'0'||inputstr[j]>'9')
{
p[j-i]='\0';
if(len<=j-i)
{
len=j-i;
strcpy(temp,p);
}
break;
if(inputstr[j]=='\0')
{
*pOutputstr=temp;
return len;
}
}
i=j;
}
i++;
}
if(len==0)
{
*pOutputstr=(char*)malloc(sizeof(char)*30);
**pOutputstr='\0';
return 0;
}
*pOutputstr=temp;
return len;
}
华为机试题—在字符串中找出连续最长的数字串 c++
最新推荐文章于 2024-05-26 14:11:36 发布