【两日一练】学习记录

题目

  1. 将 字 符 串 中 的 空 格 替 换 成 “%020” , 例 如
    “hello world how ” -> ”hello%020%020%020world%020%020%020how%020%020%020%020”

思路

如果遇到空格就换为020%即可,存到另外一个数组。

拓展

这道题难的地方在于如果要求在当前空间处理,没有额外的空间,那么就是倒着去遍历,从最后拿空格,换为%020
其实正着存也可以;正着存,遇见空格往后移三位。但是这样也会导致 时间复杂度 很高(因为移动次数相比倒着遍历的方式来说要多);因此选择最优的——即倒着存

代码

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

void replace_space()
{
    char c[100];
    int i,count,j;
    char *p;//指向我们最终使用的空间
    while(gets(c)!=NULL)
    {
        i=0,count=0;
        while(c[i])
        {
            if(c[i]==' ')
            {
                count++;//计算空格的数目
            }
            i++;
        }
        p=(char*)calloc(1,strlen(c)+3*count+1);
        for(i=strlen(c)-1,j=strlen(c)+3*count-1;i>=0;i--)
        {
            if(c[i]==' ')
            {
                p[j]='0';
                p[j-1]='2';
                p[j-2]='0';
                p[j-3]='%';
                j=j-4;
            }else{
                p[j]=c[i];
                j--;
            }
        }
        printf("%s\n",p);
        free(p);
        p=NULL;
    }
}

int main()
{
    replace_space();
    system("pause");
}

执行结果
图片说明

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务