剑指05题

剑指05题虽然简单,使用动态内存很容易实现,使用C++也很简单;但是作者的意图是时间复杂度O(n),并且不使用动态内存申请,并且C/C++需要保证传入参数长度够用。下面是C的题解,只体现作者思路,并不是最优解。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

char* replaceSpace(char* s){
    int numN=0;
    for(int i=0; s[i]; i++){
        if(s[i]==' '){
            numN++;
        }
    }
    int firstlen=strlen(s);
    int finallen=firstlen+numN*2;
    char *p=s+firstlen-1;
    char *q=s+finallen-1;
    while(p!=s){
        if(*p==' '){
            p--;
            *q--='0';
            *q--='2';
            *q--='%';
        }else{
            *q=*p;
            p--;
            q--;
        }
    }
    return s;
}

int main(){
    char str[64];
    memset(str,0x00,64);
    strcat(str,"We are happy.");
    printf("%s\n",replaceSpace(str));
}

 

posted @ 2021-01-14 22:42  谁的小流浪  阅读(68)  评论(0编辑  收藏  举报