其他分享
首页 > 其他分享> > 剑指Offer05题(字符串)

剑指Offer05题(字符串)

作者:互联网

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

  1. 第一种解法就是中规中矩地遍历数组,用一个额外的数组来装新的字符串。
char* replaceSpace(char* s){
    int count = 0;
    for (int i = 0; i < strlen(s); i++) {
        if (s[i] == ' ')
            count++;
    }
    char* ans = (char*)malloc(sizeof(char) * (strlen(s) + count * 2 + 1));
    int i = 0, j = 0;
    while (i < strlen(s)) {
        if (s[i] != ' ') {
            ans[j] = s[i];
            i++, j++;
        } else {
            ans[j] = '%';
            ans[j + 1] = '2';
            ans[j + 2] = '0';
            i++, j += 3;
        }
    }
    ans[j] = '\0';
    return ans;
}
  1. 题解用的C++,C++中的字符串有一些对应的方法,处理起来比C要方便不少。使用C++的话可以先将字符串扩充到所需要的大小,然后用两个指针,一个i指向原来字符串的末尾,一个j指向扩充后字符串的末尾,然后往前移动,如果i遇到字符就将i指向的字符赋给j指向的地方,然后i和j同时往前移动一个元素的距离;如果i遇到空格的话,就让j往前写%20这三个字符,然后j往前移动到%字符处(即移动两个元素的距离),再跟i一起往前移动一格;当i和j想错或相遇时,循环就结束,新的字符串也产生了。

标签:char,++,往前,Offer05,int,ans,字符串
来源: https://blog.csdn.net/weixin_44247784/article/details/118915565