【劍指offer】替換字串中的空格

蘭亭風雨發表於2014-05-05

轉載請註明出處:http://blog.csdn.net/ns_code/article/details/25002199


    劍指offer上的第四道題目,在九度OJ上測試通過,但還是有些問題,因為是用C語言實現的,因此,要提前開闢一個比較大的空間來儲存輸入的字串。而如果線上測試系統的測試用例中字串的長度大於該最大值的話,會報RE,但是九度OJ的測試用例沒有大於我所設定的字串的最大值。當然,這道題目用C++中的string類或java中的String類實現會更好,不需要擔心輸入字串的長度。



時間限制:1 秒

記憶體限制:128 兆

題目描述:

請實現一個函式,將一個字串中的空格替換成“%20”。例如,當字串為We Are Happy.則經過替換之後的字串為We%20Are%20Happy。

輸入:

每個輸入檔案僅包含一組測試樣例。
對於每組測試案例,輸入一行代表要處理的字串。

輸出:

對應每個測試案例,出經過處理後的字串。

樣例輸入:
We Are Happy
樣例輸出:
We%20Are%20Happy
AC程式碼:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>;

char *ReplaceBlank(char *str)
{
	if(str == NULL)
		return NULL;
	int len = strlen(str);
	if(len == 0)
		return NULL;
	int i,count = 0;
	for(i=0;i<len;i++)
		if(str[i] == ' ')
			count++;
	//沒有空格,就直接返回str
	if(count == 0)
		return str;
	int new_len = 2*count+len+1;
	char *dest = (char *)malloc(new_len*sizeof(char));
	if(dest == NULL)
		exit(EXIT_FAILURE);
	int j = 0;
	for(i=0;i<len;i++)
	{
		if(str[i] != ' ')
		{
			dest[j++] = str[i];
		}
		else
		{
			dest[j] = '%';
			dest[j+1] = '2';
			dest[j+2] = '0';
			j += 3;
		}
	}
	dest[j] = '\0';
	return dest;
}

int main()
{
	//雖然AC了(主要九度的測試用例沒有大於這個範圍的),但是人為地限制str的長度並不是最佳的方法,
	//最好使用C++中的string類或java中的String類,
	//但目前在C語言中,我還不知道怎麼可以不限定長度地從鍵盤接受輸入的字串。
	static char str[10000000];
	gets(str);
	char *dest = ReplaceBlank(str);
	if(dest != NULL)
		puts(dest);
	free(dest);
	dest = NULL;
	return 0;
}
/**************************************************************
    Problem: 1510
    User: mmc_maodun
    Language: C
    Result: Accepted
    Time:10 ms
    Memory:10976 kb
****************************************************************/

相關文章