题目:请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入"we are happy",则输出"we%20are%20happy"。 方法一:创建新的字符串并在新的字符串上做替换操作,那么我们自己可以分配足够多的内存,用来容纳新的字符串。时间复杂度为o(n)。方法二:如果是在原来的字符串上做替换,那么就要求原来的字符串中有足够多的空余内存。时间复杂度为o(n)。#include<iostream> using namespace std; //替换空格为%20 char* replace(char *arr) { int num1 = 0;//字符串中空格的个数 int index = 0;//字符串的长度 while(arr[index] != '\0') { if(arr[index++] == ' ') num1++; } int len = index + num1 * 2 + 1;//新字符串的长度 char *tmp = new char[len]; int index1 = index;//指向原来字符串的末尾字符 int index2 = len - 1;//指向新字符串末尾字符 while(index1 >= 0 && index2 >= 0) { if(arr[index1] == ' ') { tmp[index2--] = '0'; tmp[index2--] = '2'; tmp[index2--] = '%'; } else { tmp[index2--] = arr[index1]; } index1--; } return tmp; } int main(void) { char *arr = "we are happy"; char *tmp = replace(arr); cout<<tmp<<endl; system("pause"); return 0; }
#include<iostream> using namespace std; //在原来的字符串上替换空格 void replaceBlank(char *arr,int len) { //判断原来字符串是否为空,长度是否大于0 if(arr == NULL || len <= 0) return; int orgLen = 0;//原来字符串的结束长度 int blankNum = 0;//空格的个数 while(arr[orgLen] != '\0') { if(arr[orgLen++] == ' ') blankNum++; } int newLen = orgLen + blankNum * 2 + 1;//新字符要求的最小长度 if(newLen > len)//判断要求长度是否大于给定的长度 return; int p1 = orgLen;//指向原来字符串的末尾 int p2 = newLen - 1;//指向新字符串的末尾 while(p1 >= 0 && p2 >= 0) { if(arr[p1] == ' ') { arr[p2--] = '0'; arr[p2--] = '2'; arr[p2--] = '%'; } else { arr[p2--] = arr[p1]; } p1--; } } int main(void) { char arr[20] = "we are happy"; replaceBlank(arr,20); cout<<arr<<endl; system("pause"); return 0; }
替换空格
最新推荐文章于 2022-08-05 16:20:36 发布