剑指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
原创粉丝点击