面试题4:替换空格

来源:互联网 发布:获取当前系统时间 java 编辑:程序博客网 时间:2024/06/07 00:39

题目:请实现一个函数,把字符串中的每个空格替换成 “%20”。
例如输入“We are happy.”,则输出“We%20are%20happy.”

要求:在原来的字符串上做替换,并保证输入的字符串后面有足够的空余内存,常数空间复杂度。

#include <iostream>using namespace std;void ReplaceBlank(char string[], int maxLength){if (string == NULL || maxLength <= 0)return;int numOfBlank = 0;int originalLength = strlen(string);for (int i = 0; string[i] != '\0'; ++i){if (string[i] == ' ')++numOfBlank;}int newLength = originalLength + 2 * numOfBlank;if (newLength > maxLength){cout << "容量不足!" << endl;return;}int indexOfOriginal = originalLength - 1;int indexOfNew = newLength - 1;while (indexOfOriginal >= 0 && indexOfNew > indexOfOriginal){if (string[indexOfOriginal] != ' ')string[indexOfNew--] = string[indexOfOriginal];else{string[indexOfNew--] = '0';string[indexOfNew--] = '2';string[indexOfNew--] = '%';}--indexOfOriginal;}}void Test(char* testName, char string[], int length, char expected[]){if (testName != NULL)printf("%s begins: ", testName);ReplaceBlank(string, length);if (expected == NULL && string == NULL)printf("passed.\n");else if (expected == NULL && string != NULL)printf("failed.\n");else if (strcmp(string, expected) == 0)printf("passed.\n");elseprintf("failed.\n");}// 空格在句子中间void Test1(){const int length = 100;char string[length] = "hello world";Test("Test1", string, length, "hello%20world");}// 空格在句子开头void Test2(){const int length = 100;char string[length] = " helloworld";Test("Test2", string, length, "%20helloworld");}// 空格在句子末尾void Test3(){const int length = 100;char string[length] = "helloworld ";Test("Test3", string, length, "helloworld%20");}// 连续有两个空格void Test4(){const int length = 100;char string[length] = "hello  world";Test("Test4", string, length, "hello%20%20world");}// 传入NULLvoid Test5(){Test("Test5", NULL, 0, NULL);}// 传入内容为空的字符串void Test6(){const int length = 100;char string[length] = "";Test("Test6", string, length, "");}//传入内容为一个空格的字符串void Test7(){const int length = 100;char string[length] = " ";Test("Test7", string, length, "%20");}// 传入的字符串没有空格void Test8(){const int length = 100;char string[length] = "helloworld";Test("Test8", string, length, "helloworld");}// 传入的字符串全是空格void Test9(){const int length = 100;char string[length] = "   ";Test("Test9", string, length, "%20%20%20");}int main(){Test1();Test2();Test3();Test4();Test5();Test6();Test7();Test8();Test9();/*char string[100] = "hello world";ReplaceBlank(string,100);cout << string << endl;*/return 0;}


0 0
原创粉丝点击