替换空格【每日一题】

题目:实现一个函数,要求吧字符串中的所有空格替换成“%20”。例如
“hello world ” ——> ”hello%20world%20”
以前一直觉得做这种题目没什么意义,直到前两天学了网络编程才知道这种题目的意义非比寻常。
在网络编程中,如果URL参数中含有特殊的字符,如空格、’#’等,导致服务器端无法识别时,就把这些特殊的字符转换成可以识别的字符。规则:%加上十六进制的ascii码,例如‘#’的ascii码是0x23(16进制),就替换成%23,不防在浏览器中试一下输入“hello#hao”,看下地址栏中的参数。
题目分析:
在c语言中存字符串最后一位是认为”\0“的,例如a[] = “12”,那么a的长度为3,a[0]=’1’,a[1]=’2’,a[2]=’\0’,‘\0’是空字符,其ascii码为0如下图。
思路一:
可以再造一个数组,遇到空格就替换成”%20“这样就造成了空间的浪
费,可以实现但不是最佳相比之下:b[] = {‘1’, ‘2’}长度则为2.
思路二:
因为把空格替换为”%20“,每次替换多2个字符,因此可以统计出字符串中空格的总个数,然后新数组大小为 “原数组大小 + 2*空格数 ”。从后往前处理:遇到非空格,直接搬到后面,遇到空格替换为”%20“. 直到待插入位置指针和原数组为指针重合位置。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXLEN 100
void ReplaceBlack(char *str)
{
    if(str != NULL)
    {
        int i,end,pos,BlackCount = 0;
        size_t lenOld = strlen(str),lenNew;
        for(i=0;str[i]!='\0';i++)
        {
            if(str[i] == ' ')
                BlackCount++;
        }
        lenNew = lenOld+2*BlackCount;
        if(lenNew > MAXLEN)
            return ;
        pos = lenNew-1;
        end = lenOld-1;
        while(pos != end)
        {
            if(str[end] != ' ')
                str[pos--] = str[end--];
            else
            {
                str[pos--] = '0';
                str[pos--] = '2';
                str[pos--] = '%';
                end--;
            }
        }
    }
}
int main()
{
    char *a = (char*)malloc(sizeof(char) * MAXLEN);
    if(NULL != a)
    {
        strcpy(a, "hell world ");
        ReplaceBlack(a);
        printf("%s\n", a);
        free(a);
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值