1. 程式人生 > >面試題:替換空格

面試題:替換空格

一、

1、題目:請實現一個函式,把字串中的每個空格替換成“%20”。例如:輸入“We wre happy”,則輸出"We%20are%20happy"。

2、在網路程式設計中,如果URL引數中含有特殊字元,如空格、‘#’等,則可能導致伺服器端無法獲取正確的引數值。我們可以將這些特殊符號替換成伺服器可以識別的字元。可以在‘%’後面跟上ASCII碼的兩位十六進位制表示。空格的ASCII碼為32.

3、思路:

(1)把第一個指標指向字串的末尾,把第二個指標指向替換後字串的末尾

(2)依次複製字串的內容,直至第一個指標碰到第一個空格

(3)把第一個空格替換成“%20”,把第一個指標向前移動1格,把第二個指標向前移動3格

(4)依次向前複製字串中的字元,直至碰到空格

(5)替換字串中的倒數第二個空格,把第一個指標向前移動1格,把第二個指標向前移動3格

4、程式實現:

# include<stdio.h>
# include<stdlib.h>
# include<assert.h>

void IsReplaceSpace(char *arr, int len)
{
	if (NULL == arr || len <= 0)
		return;
	//計算出原始字串的長度和空格的個數
	int OriArrCount = 0;//原始字串的長度
	int NewArr = 0;//新串的長度
	int SpaceCount = 0;//空格的個數
	int i = 0;
	while (arr[i] != '\0')
	{
		++OriArrCount;
		if (arr[i] = ' ')
			++SpaceCount;
		++i;
	}
	//替換後,新串的長度
	NewArr = OriArrCount + 2 * SpaceCount;
	if (NewArr > len)
		return;
	int IndexOriArrCount = OriArrCount;
	int IndexNewArr = NewArr;
	while (IndexOriArrCount > 0 && IndexNewArr > IndexOriArrCount)
	{
		if (arr[IndexOriArrCount] == ' ')
		{
			arr[IndexNewArr--] = '0';
			arr[IndexNewArr--] = '2';
			arr[IndexNewArr--] = '%';
		}
		else
			arr[IndexNewArr--] = arr[IndexOriArrCount];
		--IndexOriArrCount;
	}
}
int main()
{
	char arr[] = "We wre happy";
	int len = strlen(arr);
	IsReplaceSpace(arr, len);
	printf("%s\n" );
	system("pause");
	return 0;
}

測試結果:

產生這種錯誤的原因是: