- 题目描写叙述:
-
请实现一个函数,将一个字符串中的空格替换成“%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 != ' ') { if(*p == ' ') { printf("%s","%20"); }else { printf("%c",*p); } p++; } printf(" "); 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] != ' ') { 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; }
-
-
-
-
-
-
-
-
-
-
-