zl程序教程

您现在的位置是:首页 >  其它

当前栏目

替换空格(五)

替换 空格
2023-09-14 09:16:11 时间
题目:实现一个函数,把字符串中的每个空格替换成"%20"。例如输入“We are happy.”,
则输出“We%20are%20happy.”。


#include <cstdio>
#include <cstring>
/*length 为字符数组str的总容量,大于或等于字符串str的实际长度*/
void ReplaceBlank(char str[], int length){
	if(str == nullptr && length <= 0)
		return;
	/*originalLength 为字符串str的实际长度*/
	int originalLength = 0;
	int numberOfBlank = 0;
	int i = 0;
	//计算出数组str的容量,然后算出加上空格的长度.
	while(str[i] != '\0'){
		++originalLength;
		if(str[i] == ' ')
			++ numberOfBlank;				
		++i;
	}

printf("xxx---------->line = %d, i = %d, originalLength = %d, numberOfBlank = %d\n",__LINE__,i,originalLength, numberOfBlank);
		
	/*newLength 为把空格替换成'%20'之后的长度*/
	int newLength = originalLength + numberOfBlank * 2;
	if(newLength > length)
		return;

	int indexOfOriginal = originalLength;
	int indexOfNew = newLength;
	while(indexOfOriginal >= 0 && indexOfNew > indexOfOriginal){			
		if(str[indexOfOriginal] == ' '){
			printf("xxx------------>line = %d, indexOfOriginal = %d\n",__LINE__,indexOfOriginal);
			str[indexOfNew--] = '0';
			str[indexOfNew--] = '2';
			str[indexOfNew--] = '%';
		}else{
			printf("xxx------------>line = %d, indexOfOriginal = %d\n",__LINE__,indexOfOriginal);
			str[indexOfNew--] = str[indexOfOriginal];
		}
		indexOfOriginal--;
	}
}

int main(int argc, char* argv[]){
	const int length = 100;
	char str[length] = "hello world";

	ReplaceBlank(str, length);
	printf("str = %s\n",str);
	
	return 0;
}