题目1510:替换空格

来源:互联网 发布:人工智能在线观看土豆 编辑:程序博客网 时间:2024/06/05 18:48
题目描述:

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

输入:

每个输入文件仅包含一组测试样例。
对于每组测试案例,输入一行代表要处理的字符串。

输出:

对应每个测试案例,出经过处理后的字符串。

样例输入:
We Are Happy
样例输出:
We%20Are%20Happy

这是剑指offer上面的一道题目,被九度改编成了上机题。
如果要单纯的完成这道题,有个很简单的思路就是,遇到非空格就输出,遇到空格就输出“%20”。对应代码是这样的:

#include <iostream>#include <string>#include <cstdio> using namespace std; int main(){    char str[10000001];    while(gets(str))    {           int i=0;        while(str[i]!='\0')        {             if(str[i]==' ') cout<<"%20";             else cout<<str[i];             i++;                         }           cout<<endl;                 }       return 0;} /**************************************************************    Problem: 1510    User: 小燧石    Language: C++    Result: Accepted    Time:20 ms    Memory:11216 kb****************************************************************/
但是,很明显这是一种投机取巧的办法,不是题目的本意。我想题目的本意应该是不使用其他的缓冲区,将这样的字符串转存为题目中的形式。
《剑指offer》中分析的很清楚,如果从前往后找空格,遇到空格时将后面的字符后移,这样后面的字符会多次移动,影响效率。如果先计算出空格数目,从后往前,就可以实现一个字符只移动一次。转换一个思路。效率会大增,上代码:
#include <iostream>#include <string.h>#include <cstdio> usingnamespace std; charstr[10000001]; intmain(){        while(gets(str))    {          intnum=0,len=0;        len = strlen(str);        for(inti=0;i<len;i++)        {            if(str[i]==' ') num++;                }                  for(inti=len-1;i>=0;i--)        {             str[i+num*2] = str[i];             if(str[i]==' ')             {                 str[i+num*2]='0';                 str[i+num*2-1]='2';                 str[i+num*2-2]='%';                 num--;              }            }                  len = strlen(str);        for(inti=0;i<len;i++)        {            cout<<str[i];              }         cout<<endl;                }      return0;} /**************************************************************    Problem: 1510    User: 小燧石    Language: C++    Result: Accepted    Time:30 ms    Memory:11284 kb****************************************************************/

0 0
原创粉丝点击