請一個在字符串中找出連續最長的數字串,並把這個串的長度返回;如果存在長度相同的連續數字串,返回最後一個連續數字串
題目描述:
請一個在字符串中找出連續最長的數字串,並把這個串的長度返回;如果存在長度相同的連續數字串,返回最後一個連續數字串;
注意:數字串只需要是數字組成的就可以,並不要求順序,比如數字串“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;
}