算法實現--字符串替換空格

/*
	題目描述:
	請實現一個函數,將一個字符串中的每個空格替換成“%20”。例如,當字符串爲We Are Happy.則經過替換之後的字符串爲We%20Are%20Happy。

	思路:
	問題1:替換字符串,是在原來的字符串上做替換,還是新開闢一個字符串做替換!
	問題2:在當前字符串替換,怎麼替換才更有效率(不考慮java裏現有的replace方法)。
	從前往後替換,後面的字符要不斷往後移動,要多次移動,所以效率低下
	從後往前,先計算需要多少空間,然後從後往前移動,則每個字符只爲移動一次,這樣效率更高一點。

	參數列表:
	str 待替換字符串;length爲str字符串的最大容量;s爲原字符串中需要被替換的字符,這裏爲空格;p爲將要替換成的字符串,這裏爲“%20”
*/
void ReplaceSpace(char *str, int length, char s, char *p)
{
	if (str == nullptr || length <= 0 || p == nullptr)
		return;

	int p_len = strlen(p);
	if (p_len <= 1)
		return;

	int orignal_length = 0;
	int count_of_balnk = 0;
	for (int i = 0; str[i] != '\0'; i++)
	{
		orignal_length++;		// 統計原字符串的長度
		if (str[i] == s)
			count_of_balnk++;	// 統計原字符串中空格的長度
	}

	int new_length = orignal_length + count_of_balnk * (p_len - 1); // 計算新字符串長度
	if (new_length +1 > length)
		return;

	int orignal_index = orignal_length; // 這裏最大索引爲字符串長度值,會複製結束符'\0'
	int new_index = new_length;

	while (orignal_index >= 0 && orignal_index < new_index)
	{
		if (str[orignal_index] == s)
			for (int i = p_len -1; i >= 0; i--)
				str[new_index--] = p[i];
		else
			str[new_index--] = str[orignal_index];

		orignal_index--; // 每次處理一個原結尾字符,索引就前移一位
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章