剑指offer复习笔记1
来源:互联网 发布:php 编译mysql 编辑:程序博客网 时间:2024/06/05 22:58
问题描述
请实现一个函数,把字符串中的每个空格替换成”%20”。例如,输入“We are happy.”,则输出“ We%20are%20happy.”。
在网络编程中,如果URL参数中含有特殊字符,如空格、’#’等,可能导致服务器端无法获得正确的参数值。我们需要将这些特殊符号转换成服务器可以识别的字符。转换的规则是在’%’后面跟上ASCII码的两位十六进制的表示。比如空格的ASCII码是32,即十六进制的0x20,因此空格被替换成”%20”。再比如’#’的ASCII码为35,即十六进制的0x23,它在URL中被替换为”%23”。
函数实现
#include<stdio.h>#include<string.h>void replace_black(char *str){ char *pstr=str; int oldlen=strlen(str); int newlen=0; int count=0; while(*pstr) { if(*pstr==' ') count ++; pstr++; } newlen=oldlen + 2 * count; while(oldlen < newlen) { if(str[oldlen]==' ') { str[newlen--] = '0'; str[newlen--] = '2'; str[newlen--] = '%'; oldlen--; } else str[newlen--]=str[oldlen--]; }}int main(){ char str[20]="we are happy"; replace_black(str); printf("%s\n",str); return 0;}
//高质量代码风格#include <stdio.h>/*length为字符数组string的总容量*/void ReplaceBlank(char string[], int length) { /*边界条件、特殊输入*/ if(string == NULL || length <= 0) { return; } /*originalLength为字符串string的实际长度*/ int originalLength = 0; int numberOfBlank = 0; char *pstr = string; while(*pstr) { ++ originalLength; if (*pstr == ' ') { ++ numberOfBlank; } pstr ++; } /*newLength为把空格替换成'%20'之后的长度*/ int newLength = originalLength + numberOfBlank * 2; /*边界条件检查*/ if (newLength > length) { return; } /*从字符串的后面开始复制和替换*/ int indexOfOriginal = originalLength; int indexOfNew = newLength; while(indexOfOriginal >= 0 && indexOfNew > indexOfOriginal) { if (string[indexOfOriginal] == ' ') { string[indexOfNew --] = '0'; string[indexOfNew --] = '2'; string[indexOfNew --] = '%'; } else { string[indexOfNew --] = string[indexOfOriginal]; } -- indexOfOriginal; }}int main(void) { char str[20] = {"We are happy."}; ReplaceBlank(str, 20); puts(str); return 0;}
0 0
- 剑指offer复习笔记1
- 20分钟复习《剑指Offer》
- 剑指offer重点复习题目
- 剑指offer重点复习题目
- 剑指offer学习笔记1
- 复习hibernate笔记 1
- 数据结构复习笔记(1)
- hibernate复习笔记1
- SCJP复习笔记(1)
- HTML 复习笔记(1)
- JDBC 复习笔记1
- Linux 复习笔记1
- Android复习笔记1
- TIJ 复习笔记1
- c#复习笔记1
- CPP复习笔记 1
- 数据结构复习笔记 1
- 复习笔记(1)
- centos6.5安装oracle11g
- BZOJ 1269: [AHOI2006]文本编辑器editor 分离合并Splay
- 小技巧:TextView 展开收起
- VMware中Centos7的静态ip设置
- git 报错 RPC failed; curl 18 transfer closed with outstanding read data remaining
- 剑指offer复习笔记1
- Ubuntu下.py文件的运行
- Linux学习笔记17
- poj 3465 贪心+优先队列 叉姐的魔法训练
- 程序员的情书(发现就更新)
- type定义函数类型
- POJ1703 Find them, Catch them(并查集+向量偏移)
- C++中的 istringstream 的用法
- Python网络编程socket模块