替换空格

xiaoxiao2021-02-28  42

题目:实现一个函数,把字符串的每个空格替换成“ ”。如"we are family.",输出为“we are family.  (在原来的字符串上进行替换,并保证输入的字符串后面有足够多的空余内存。 1为何?? 网络编程里,若URL参数中含特殊的字符,如空格,#等,会让服务器无法获取正确的参数值,则须将其转换成服务器可识别的字符,转换规则:‘%’+ASCII码的两位十六进制      空格的ASCII码32,转换成16进制0x20 2实现 需要考虑时间的复杂度!!!以及覆盖问题 (1)若用直观的解法,从头到尾扫描字符串,每次碰到空格就替换,考虑覆盖问题,所以要把空格后面所有字符都后移两个字节。 若字符串长度为n,则时间复杂度为O(n^2)。 【2】从后往前进行替换。 (1)先遍历一遍字符串,统计字符串中空格的数目。 (2)计算替换空格后字符串的总长度 (3)从后面开始进行赋值与替换。 如何实现??? 1定义两个指针,p1指向原字符串的末尾,p2指向替换后字符串的末尾 2然后向前移动p1,逐个将其指向的字符复制到p2指向的位置,直到碰到第一个空格。此时,将P1前移一格,,在p2前插入“ ”。此时p2需前移3个格,之后碰到后面的空格同上处理,直到p1和p2指向同一位置,表示所有空格替换完成。 代码的实现 #include <cstdio> #include <cstring> #include<iostream> using namespace std; void ReplaceBlank(char str[], int len) {      if (str == NULL && len <= 0)      {            return;      }      int firstLen = 0;//实际长度      int countBlank = 0;//空格数            int i = 0;            while (str[i] != '\0')            {                 ++firstLen;                 if (str[i] == ' ')                 {                      ++countBlank;                 }                 ++i;            }            int newlen = firstLen + 2 * countBlank;            if (newlen > len)            {                 return;            }            int inFirst = firstLen;            int inNew = newlen;            while (inFirst >= 0 && inFirst < inNew)            {                 if (str[inFirst] == ' ')                 {                      str[inNew--] = '0';                      str[inNew--] = '2';                      str[inNew--] = '%';                 }                 else                 {                      str[inNew--] = str[inFirst];                 }                 --inFirst;            }       } void main() {      const int len = 100;      char str[len] = "we are family";      ReplaceBlank(str, len);      cout << str << endl; }
转载请注明原文地址: https://www.6miu.com/read-2629310.html

最新回复(0)