請一個在字符串中找出連續最長的數字串,並把這個串的長度返回;如果存在長度相同的連續數字串,返回最後一個連續數字串

請一個在字符串中找出連續最長的數字串,並把這個串的長度返回;如果存在長度相同的連續數字串,返回最後一個連續數字串


題目描述:
請一個在字符串中找出連續最長的數字串,並把這個串的長度返回;如果存在長度相同的連續數字串,返回最後一個連續數字串;

注意:數字串只需要是數字組成的就可以,並不要求順序,比如數字串“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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章