替换空格【每日一题】
来源:互联网 发布:制作音效的软件 编辑:程序博客网 时间:2024/06/03 20:19
题目:实现一个函数,要求吧字符串中的所有空格替换成“%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 100void 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
- 每日一题:替换空格
- 替换空格【每日一题】
- 每日一题(2) - 替换空格
- 每日一题11:替换字符串中的空格
- 算法之每日一题:替换字符串空格
- 【每日一题-6】栈和队列与替换空格
- 【每日一题】替换字符串中的空格为$$$。要求时间复杂度为O(N)
- [每天一题]把所有的空格替换成‘%20’
- 第四题 替换空格
- 算法题/替换空格
- 每日一算法:字符串的替换
- 替换连续空格为一空格的三种方法
- 算法题2:替换空格
- 【每日一题】2012.5.27:删除多余的空格-非原创
- 【每日一题】2012.5.27:删除多余空格-非原创-方法2
- 空格替换
- 替换空格
- 空格替换
- C++类库bitset<>简介
- linux修改Ubuntu的aptget源
- POJ 3067 Japan 笔记
- Android如何让APP进程常驻内存?
- 第1节-Linux学习
- 替换空格【每日一题】
- MySQL数据库优化
- 《人人都是产品经理》——第二章笔记(上)
- ObjectStore::Transaction
- 树状数组
- java算法学习笔记--递归算法/分而治之思想
- Debian/Ubuntu 最简中文环境配置
- 当前时间加多个月
- 你不知道的javascript上卷