C++简单易懂题解

替换空格

http://www.nowcoder.com/questionTerminal/4060ac7e3e404ad1a894ef3e17650423

length给定的是char字符串申请的长度,而不是实际的字符数

  1. 扫描一遍,arraty[i]!='\0'跳出,先统计实际字符数,即实际长度len,和‘ ’个数count

  2. 一个' '-->'%20',长度增加2,则改变后的长度应为len+count*2,若改长度>length,则直接return

  3. str[len+count*2]='\0',新长度的末尾加上结束符,不然不能全A

  4. for循环,从i=len-1,向后挪就好了;遇上字符,str[i+count2]=str[i];遇上空格,就在i+count2、i+count2-1、i+count2-2分别置为0、2、%,并且count--
    因为有一个空格,空格后面的字符就会向后移2位,留出空间;有count个空格,就要向后移count*2位

    class Solution {
    public:
     void replaceSpace(char *str, int length) {
         int count = 0;
         int len = 0;
         while (str[len] != '\0')
         {
             count += str[len] == ' ' ? 1 : 0;
             len++;
         }
    
         if (count == 0 || len+count*2>length)return;
         str[len + count * 2] = '\0';
         for (int i = len-1; i >= 0; i--)
         {
    
             if (str[i] == ' ')
             {
                 str[i + 2*count] = '0';
                 str[i + 2*count -1] = '2';
                 str[i+2*count-2] = '%';
                 count--;
             }
             else {
                 str[i+2*count] = str[i];
             }
             if (count == 0)
                 break;
         }
         return;
     }
    };
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务