字符串的替换空格问题

来源:互联网 发布:淘宝的鹰眼系统 编辑:程序博客网 时间:2024/06/05 07:58

题目:把字符串中的空格替换成%20,例如 “we are happy”替换成“we%20are%20happy”;

思路分析:如果从头遍历,遇到空格就替换,则后面整个串都要移动,这样下来,时间复杂度就会很大,那么,为何不考虑从后往前替换呢。

#include<stdio.h>#include<malloc.h>//把空格替换成%20//两种方法:1、创建一个新的数组//2、在原有数组上进行更改char* ReplaceBlank1(char *string){     if(string == NULL)     {          return NULL;     }     int length = 0;     int black = 0;     int i = 0;     while(string[i] != '\0')     {          length++;          if(string[i] == ' ')          {              black++;          }          i++;     }     char *tmp = (char *)malloc(sizeof(char)*(length+black*2)+1);     i = 0;     int j = 0;     for(;i<=length;i++)     {          if(string[i] == ' ')  {              tmp[j] = '%';              tmp[++j] = '2';              tmp[++j] = '0';          }          else          {              tmp[j] = string[i];          }          j++;     }     return tmp;}void ReplaceBlank2(char *string,int length){     if(string == NULL || length<0)     {          return;     }     int old = 0;     int black = 0;     int i = 0;     while(string[i] != '\0')     {          old++;          if(string[i] == ' ')          {              black++;          }          i++;     }     int newlen = old + black*2 +1;//得到新的串的大小     for(int j = old+1;j>=0;--j)     {          if(string[j] != ' ') //如果不等于空格,则一直插入即可          {              string[newlen--] = string[j];          }          else //如果等于空格,就进行替换          {              string[newlen--] = '0';              string[newlen--] = '2';              string[newlen--] = '%';          }     }}int main(){     char arr[50] = "We are student. ";     int length = sizeof(arr)/sizeof(arr[0]);     char *tmp = ReplaceBlank1(arr);     ReplaceBlank2(arr,50);     printf("%s\n",arr);     printf("%s\n",tmp);     free(tmp);}
总结:学会找到最简单的办法,时间和空间复杂度越小越好咯。


原创粉丝点击