-
题目描述:
-
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
-
输入:
-
每个输入文件仅包含一组测试样例。
对于每组测试案例,输入一行代表要处理的字符串。
-
输出:
-
对应每个测试案例,出经过处理后的字符串。
-
样例输入:
-
We Are Happy
-
样例输出:
-
We%20Are%20Happy
--------------------------------------------------------------------------
-
先来一个最初ac的搞笑版的代码:
-
#include<stdio.h> #include<stdlib.h> int main() { char str[1000000]; gets(str); char *p = str; while(*p != '\0') { if(*p == ' ') { printf("%s","%20"); }else { printf("%c",*p); } p++; } printf("\n"); return 0; } /************************************************************** Problem: 1510 User: Rowandjj Language: C++ Result: Accepted Time:30 ms Memory:1928 kb ****************************************************************/
当然,这不是本题本意,哈哈。。 -
思路应该是这样的:
-
1.首先遍历一遍该字符串,计算字符串长度len、字符串中空格个数num。新串的长度应该为len+num*2.2.建立两个指针分别指向原始串与替换后的串尾位置。 从后向前复制,遇到空格就替换成%20.代码:
-
/********************************* 替换空格 by Rowandjj 2014/7/16 *********************************/ #include<iostream> #include<stdio.h> using namespace std; #define MAX 1000000 //替换空格(在原始串的基础上) void ReplaceBlank(char string[],int len)//len为字符数组总长度 { if(string == NULL || len <= 0) { return; } int i = 0; int o_len = 0;//原始串有效字符长度 int b_len = 0;//空格个数 while(string[i] != '\0') { o_len++; if(string[i] == ' ') { b_len++; } i++;//别忘了i自增,否则永远出不来 } int n_len = o_len + b_len*2;//替换后的串的长度 if(n_len > len)//新串长度大于字符数组总长度 { return; } int n_index = n_len;//指向新串的指针,开始时指向串尾 int o_index = o_len;//指向原始串的指针 while(o_index >= 0 && n_index>o_index)//采用从后向前复制替换,好处是减少字符的移动次数 { if(string[o_index] == ' ')//指向空格时 { string[n_index--] = '0'; string[n_index--] = '2'; string[n_index--] = '%'; }else { string[n_index--] = string[o_index]; } o_index--; } } int main() { char str[MAX]; char *p = str; gets(p); ReplaceBlank(str,MAX); cout<<p<<endl; return 0; }
-
-
-
-
-
-
-
-
-
-
-