请实现一个函数,把字符串中的每个空格替换成“% 20”。

  

第一种:

思路:

遍历一个字符串,遇到空格向后移动三个字符空间,插入% 20,直到遍历结束。

时间复杂度O (n ^ 2)

空间复杂度O (1)

# include   # include   # include   using  namespace 性传播疾病;   void  memmove (void *, src, void *, des, size_t 大小)   {   char *, d=des (char *);   char *, s=src (char *);   如果((s-d> 0),和(s-d<,大小)   {   而(大小)   {   s[大小是1]=d(大小);   }   }   其他的   {   int  i=0;   而(i<大小)   {   s[我]=d[我];   我+ +;   }   }   }   void 取代(char *, s)   {   断言(年代);   而(*)   {   如果(*年代!=',')   {   s + +;   }   其他的   {   memmove才能(s + 3, + 1, strlen (s + 1) + 1);   ,,* s + +=?’;   ,,* s + +=' 2 ';   * s=' 0 '才能;   }   }      }   int  main ()   {   char  s[30]="断开连接,我方表示歉意,年轻”;   替换(年代);   cout<& lt; s<& lt; endl;   系统(“暂停”);   return  0;   }

结果:

请实现一个函数,把字符串中的每个空格替换成“% 20


第二种:

思路:如果面试官允许开辟新的空间,则利用两个指针*,* str分别指向原字符串,新字符串的首部,

依次遍历原字符串,字符不是空格,就将*年代赋值给* str,如果遇到空格,向新字符串中插入% 20,直到原字符串遍历结束。

时间复杂度O (n)

空间复杂度O (n)

# include   # include   # include   void 取代(char *,年代,char *, str)   {   而(*)   {   如果(*年代!=',')   {   * str=*年代;   str + +;      }   其他的   {   % 20“strcpy (str);   str=str + 3;      }   s + +;   }   * str=' \ 0 ';   }   int  main ()   {   char  s[]=岸峡游曳奖硎厩敢?年轻”;   char  str [30];   替换(年代,str);   printf (" % s \ n ", str);   系统(“暂停”);   return  0;   }      第三种:   思路:   先遍历一遍字符数组,计算空格数量,定义两个指针p1, p2,一个指向原字符串的末尾,一个变化后的字符串末尾,p1从尾向头遍历,依次把值赋给p2, p1遇到空格时,在p2所指向的位置插入“% 20”。   代码:   # include   # include   # include   # include   void 插入(char *, str, int 兰)   {   断言(str);   int  newlength=len + 1;   int  i=0;   而(str[我]!=' \ 0 ')   {   ,,,,,,如果(str[我]==',')   ,,{   ,,newlength +=2;   ,,}   ,,我+ +;   }   char *, p1=str +兰;   char *, p2=str + newlength-1;   而(p1 !=str)   {   如果(* p1==', ')   {   ,,p2 -=2;   strncpy (p2,“% 20”, sizeof (char) * 3);   }   其他的   {   * p2=* p1;         }   p1 -;   p2 -;      }   }   int  main ()   {   char  s[30]=岸峡游曳奖硎厩敢?年轻”;   插入(年代,strlen (s));   printf (" % s \ n ", s);   系统(“暂停”);   return  0;   }


请实现一个函数,把字符串中的每个空格替换成“% 20”。