[Pregunta] La espada P51 se refiere a la oferta: reemplazar espacios: implemente una función para reemplazar cada espacio en la cadena con "% 20". Por ejemplo, si ingresa "Estamos contentos", ingrese "Estamos% 20estamos% 20 contentos".

La espada P51 se refiere a la oferta: reemplazar espacios

Implemente una función para reemplazar cada espacio en la cadena con "% 20". Por ejemplo, si ingresa "Estamos contentos", ingrese "Estamos% 20estamos% 20 contentos".

el código se muestra a continuación:

Idea: Reemplace los espacios en la cadena con "% 20" de atrás hacia adelante.
Complejidad de tiempo: O (n)

/*  替换空格  */
/*  length为字符数组string的总容量  */
void ReplaceBlank(char* string, int length)
{
    
    
	/*  判断非法测试  */
	if (string == nullptr || length <= 0)
		return;
	/*  OriginalLength为字符串string的实际长度  */
	int OriginalLength = 0;
	int NumberOfBlank = 0;
	int i = 0;
	while (string[i] != '\0')
	{
    
    
		OriginalLength++;
		if (string[i] == ' ')
			NumberOfBlank++;
		i++;
	}
	/*  NewLength为字符串string中的空格替换成'%20'之后的长度  */
	int NewLength = OriginalLength + NumberOfBlank * 2;
	/*  数组string放不下替换之后的字符串,则不进行替换  */
	if (NewLength > length)
		return;
	int IndexOfOiginal = OriginalLength;
	int IndexOfNew = NewLength;
	while (IndexOfOiginal >= 0 && IndexOfNew > IndexOfOiginal)
	{
    
    
		if (string[IndexOfOiginal] == ' ')
		{
    
    
			string[IndexOfNew--] = '0';
			string[IndexOfNew--] = '2';
			string[IndexOfNew--] = '%';
		}
		else
			string[IndexOfNew--] = string[IndexOfOiginal];
		IndexOfOiginal--;
	}
}

int main()
{
    
    
	/*
	char a[] = "We are happy.";
	导致栈溢出,因为这样定义会默认数组大小
	利用下标访问数组会非法访问
	*/

	char a[18] = "We are happy.";
	cout << "替换前:" << a << endl;
	ReplaceBlank(a, 18);
	cout << "替换后:" << a << endl;
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/m0_46613023/article/details/114293729
Recomendado
Clasificación