剑指 Offer 05. 替换空格(C语言)

剑指 Offer 05. 替换空格(C语言)

1. Title

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

示例:
,,,
详情:点击这里

2. Do it

2.1. version 0.1(success)

/*!
 * @file 05replaceSpace.c
 * @date 2021-08
 * @version 0.1
 * @author forbit
 * @brief 创建新的数组,在空格的地方使用新的填充
 * @details score 0-4ms 5.5MB 空间复杂度:O(数组长度*2),时间复杂度:O(1)
 */

char* replaceSpace(char* s){
    /*!
     * @brief
     * @param[in] s 字符串
     * @return 字符串指针
     */

    int happend_number = 0;  //!< 表示空格出现次数

    //! 计算数组空格的数量
    for(int i=0; i<strlen(s); i++)
        if(s[i] == 32)  //! 字符串空格对应的ASCII码的十进制是32
            happend_number++;

    //! 计算数组长度,创建数组。
        //! 多出来的1是用于存放0,表示字符串结束。
    int s_new_length = strlen(s) + happend_number*2 + 1;  //!< 表述字符长度
    char s_new[s_new_length];  //!< 表示新字符串
    int j = 0;  //!< 用于循环中跟踪新字符串的下标
    char *p;  //!< 表示返回的指针

    for(int i=0; i<strlen(s); i++){
        if(s[i] == 32){  //! 判断数组是否为空格
            s_new[j] = 37; j++;  //! 表示字符%
            s_new[j] = 50; j++;  //! 表示字符2
            s_new[j] = 48;  //! 表示字符0
        }else  s_new[j] = s[i];
        j++;
    }

    s_new[s_new_length-1] = 0;  //! 表示字符串结束
    
    p = &s_new;

    return p;
}
posted @ 2021-08-21 21:55  forbit  阅读(138)  评论(0)    收藏  举报