替换空格

C++代码:

class Solution {
public:
	void replaceSpace(char *str,int length) {
        if (str == NULL || length <= 0) {
            return;
        }
        
        int oriLength = 1, blankCount = 0;
        // 获取原来的实际长度(包括‘\0’)和空格数量
        for (int i = 0; str[i] != '\0'; i++) {
            if (str[i] == ' ') {
                blankCount++;
            }
            
            oriLength++;
        }
        
        int newLength = oriLength + blankCount * 2;
        // 如果要求的新长度>可以分配的总长度
        if (newLength > length) {
            return;
        }
        
        // 从后向前遍历,依次替换空格
        // 从后往前,每个空格后面的字符只需要移动1次。
        // 从前往后,当遇到第一个空格时,要移动第一个空格后所有的字符2次;
        // 当遇到第2个空格时,要移动第二个空格后所有的字符2次;以此类推。所以总的移动次数会更多。
        for (int i = oriLength - 1, j = newLength - 1; i >= 0; i--) {
            if (str[i] == ' ') {
                str[j--] = '0';
                str[j--] = '2';
                str[j--] = '%';
            } else {
                str[j--] = str[i];
            }
        }
	}
};

 

posted on 2025-11-29 15:09  王景迁  阅读(0)  评论(0)    收藏  举报

导航