大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。
一 题目:替换空格
题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入‘“We are happy”,则输出“We%20are%20happy”.
在网络编程中,如果URL参数中含有特殊字符,如空格、’#’等,可能导致服务器端无法获得正确的参数值。我们需要将这些特殊符号转换成服务器可以识别的字符。转换的规则是在’%’后面跟上ASCII码的两位十六进制的表示。比如空格的ASCII码是32,即十六进制的0x20,因此空格被替换成”%20″。再比如’#’的ASCII码为35,即十六进制的0x23,它在URL中被替换为”%23″。
二 代码实现
O(n2)解法
最直观的做法是从头到尾扫描字符串,每一次碰到空格字符的时候做替换。由于是把1个字符替换成3个字符,我们必须要把空格后面所有的字符都后移两个字节,否则就有两个字符被覆盖了。
假设字符串的长度是n。对每个空格字符,需要移动后面O(n)个字符,因此对含有O(n)个空格字符的字符串而言总的时间效率是O(n2)。
O(n)解法
#include "stdio.h" #include <iostream> using namespace std; // 在不适用另外的buff的情况下将空格替换为字符串 char cBuff[100] = "We are happy!"; void ReplaceBlank(char *cBuff) { char cVal; int i = 0; int nBlankNum = 0; // 统计空格的数目 int nBuffLen = 0; while((cVal = cBuff[i++]) && (cVal != '#include "stdio.h" #include <iostream> using namespace std; // 在不适用另外的buff的情况下将空格替换为字符串 char cBuff[100] = "We are happy!"; void ReplaceBlank(char *cBuff) { char cVal; int i = 0; int nBlankNum = 0; // 统计空格的数目 int nBuffLen = 0; while((cVal = cBuff[i++]) && (cVal != '\0')) { if (cVal == ' ') { nBlankNum ++; } nBuffLen ++; } cout << "字符串长度:"<< nBuffLen << "空格个数:"<< nBlankNum << endl; for (int k = nBlankNum*2 + nBuffLen, j = nBuffLen-1; j >=0 && k >= 0;j--) { if (cBuff[j] == ' ') { cBuff[--k] = '0'; cBuff[--k] = '2'; cBuff[--k] = '%'; } else { cBuff[--k] = cBuff[j]; } } cout << "转换后的字符串:"<< cBuff << endl; } void main() { ReplaceBlank(cBuff); return; }')) { if (cVal == ' ') { nBlankNum ++; } nBuffLen ++; } cout << "字符串长度:"<< nBuffLen << "空格个数:"<< nBlankNum << endl; for (int k = nBlankNum*2 + nBuffLen, j = nBuffLen-1; j >=0 && k >= 0;j--) { if (cBuff[j] == ' ') { cBuff[--k] = '0'; cBuff[--k] = '2'; cBuff[--k] = '%'; } else { cBuff[--k] = cBuff[j]; } } cout << "转换后的字符串:"<< cBuff << endl; } void main() { ReplaceBlank(cBuff); return; }
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/120173.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...