替换空格

it2022-05-09  32

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

        看到这题我的第一想法是从头到尾遍历字符串,每次碰到空格时将其进行替换。这样我们就得把后面的每个字符都向后移两个字节。但是这种想法的时间复杂度是O(n^2)。所以不是一种很好的方法

        先遍历一遍字符串,将字符串中的空格个数记录下来,替换以后字符串长度等于原来的长度加上2乘以空格总数。然后从字符串的后面开始复制和替换。将字符从后面依次复制,遇到空格的地方就替换成“ ”。这种做法的时间复杂度是O(n)。

代码: #include<iostream> using namespace std; void ReplaceBlank(char string[],int Length) { if(string == NULL || Length < 0) { return; } int n = 0;//字符数组的实际长度 int blank = 0;//空格的个数 int i = 0; while(string[i] != '\0') { ++n; if(string[i] == ' ') { ++blank; } ++i; } int newLength = n + blank*2; int a = n; int b = newLength; while(a >= 0 && b > a) { if(string[a] == ' ') { string[b--] = '0'; string[b--] = '2'; string[b--] = '%'; } else { string[b--] = string[a]; } --a; } } int main() { char arr[20] = {"We are happy."}; ReplaceBlank(arr,20); int i = 0; while(arr[i] != '\0') { printf("%c",arr[i]); i++; } printf("\n"); return 0; }

 


最新回复(0)