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

2018-01-24  本文已影响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;
}
上一篇 下一篇

猜你喜欢

热点阅读