请一个在字符串中找出连续最长的数字串,并把这个串的长度返回;如果存在长度相同的连续数字串,返回最后一个连续数字串
题目描述:
请一个在字符串中找出连续最长的数字串,并把这个串的长度返回;如果存在长度相同的连续数字串,返回最后一个连续数字串;
注意:数字串只需要是数字组成的就可以,并不要求顺序,比如数字串“1234”的长度就小于数字串“1359055”,如果没有数字,则返回空字符串(“”)而不是NULL!
样例输入:
abcd12345ed125ss123058789
样例输出:
输出123058789,函数返回值9
样例输入:
abcd12345ss54761
样例输出:
输出54761,函数返回值5
代码:
int Continumax(char* in, char* out)
{
int len, i;
int count = 0, tempCount = 0; //count记录出现数字串最多的个数,tempCount记录每一次数字串的个数
int move = 0, tempMove = 0; //move记录数字串最多的首地址,tempMove记录每一次数字串的首地址
int flag = 0;
if(in == NULL || out == NULL)
return 0; //如果为空,直接返回0
len = strlen(in);
for(i = 0; i < len; i++){
if(in[i] >= '0' && in[i] <= '9'){ //遇到数字,tempCount开始记录这一串数字串的个数
tempCount ++;
if(flag == 0){ //判断是不是数字串的首地址,如果是首地址则记录,不是则不管
tempMove = i;
flag = 1;
}
}else{ //数字串中断,判断记录中的最长串跟当前比,如果当前串比最长串长,则把当前串当做最长串,当前串地址作为最长串地址
if(tempCount >= count){
count = tempCount;
move = tempMove;
}
tempCount = 0;
flag = 0;
}
if(i == len - 1){ //如果是以数字串结尾,结束前还需要再判断一下最长串和当前串
if(tempCount >= count){
count = tempCount;
move = tempMove;
}
}
}
if(count == 0){ //如果没有数字串,将空字符串拷贝到out中
strcpy(out, " ");
out[1] = '\0';
}else{
strncpy(out, in + move, count);
out[count] = '\0'; //如果有数字串,将最长串拷贝到out中
}
return count;
}