美文网首页
【剑指Offer学习】【面试题04:替换空格】

【剑指Offer学习】【面试题04:替换空格】

作者: 果哥爸 | 来源:发表于2018-01-24 11:41 被阅读18次

    题目:

    请实现一个函数,把字符串中的每个空格替换成"%20",例如“We are happy.”,则输出“We%20are%20happy.”。

    解答:

    /**
     * 请实现一个函数,把字符串中的每个空格替换成"%20",例如“We are happy.“,则输出”We%20are%20happy.“。
     *
     * @param str     要转换的字符数组
     * @return 转换后使用的字符长度,-1表示处理失败
     */
    NSInteger replaceBlankChar(char *str) {
        
        // 判断输入是否合法
        if (str == nil || strlen(str) == 0) {
            return -1;
        }
        
         // 统计字符数组中的空白字符数
        NSInteger oldStringLength = strlen(str);
        NSInteger blancChatCount = 0;
        for (NSInteger tmpIndex = 0; tmpIndex < oldStringLength; tmpIndex++) {
            if (str[tmpIndex] == ' ') {
                blancChatCount ++;
            }
        }
        
        // 如果没有空白字符就不用处理
        if (blancChatCount == 0) {
            return oldStringLength;
        }
        
        // 从后向前,第一个开始处理的字符
        // 处理后的字符放置的位置
        // 字符中有空白字符,一直处理到所有的空白字符处理完
        
        NSInteger newStringLength = oldStringLength + blancChatCount * 2;
        NSInteger tmpNewStringLength = newStringLength;
        for (NSInteger tmpCount = oldStringLength; tmpCount > 0; tmpCount--) {
            if (str[tmpCount] == ' ') {
                str[newStringLength--] = '0';
                str[newStringLength--] = '2';
                str[newStringLength--] = '%';
            }
            else {
                str[newStringLength--] = str[tmpCount];
            }
        }
        printf("%s\n", str);
        return tmpNewStringLength;
    }
    
    
    int main(int argc, const char * argv[]) {
        @autoreleasepool {
    
            char str[50];
            gets(str);
            replaceBlankChar(str);
            
        }
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:【剑指Offer学习】【面试题04:替换空格】

          本文链接:https://www.haomeiwen.com/subject/bdklaxtx.html