码迷,mamicode.com
首页 > 其他好文 > 详细

替换空格

时间:2015-05-04 22:04:00      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:

题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy.”,则输出“We%20are%20happy.”。

 

解题思路:以时间效率优先的话,可以分为两种处理办法,一种利用辅助内存,即新开辟一个数组,时间复杂度为O(n)

另一种不用辅助内存,即在原数组上操作:

1.先遍历一次数组,统计空白字符个数,记录在blankcount中,数组的最后一位‘\0’的下标记录在index中;

2.求得替换空格后的数组最后一位下标lastindex=index+2*blankcount;

3.从后往前遍历数组,替换数组中的空格。

 

实现代码如下:

#include<iostream>
#include<string>
using namespace std;
void replace(char *array,int length)
{
    if(array!=NULL&&length>0)//判断参数是否合法
    {
        int blankcount=0,index=0;//blankcount记录空格数,index记录数组中最后一为‘\0‘的下标
        while(array[index]!=\0)//统计空格数
        {
            if(array[index]== )
                blankcount++;
            index++;
        }
        //置换空格之后实际数组最后一位的下标
        int lastindex=index+2*blankcount;
        //判断数组容量是否合格
        if(lastindex>length)
        {
            cout<<"数组长度不够!"<<endl;
            return;
        }
        //循环将空格替换为“%20”
        while(index<lastindex&&index>=0)
        {
            if(array[index]== )
            {
                array[lastindex--]=0;
                array[lastindex--]=2;
                array[lastindex--]=%;
                index--;
            }
            else
            {
                array[lastindex--]=array[index--];
            }
        }
    }
}
int main()
{
    char a[100]={ ,a,b, , ,c,d, ,e,f, };//测试用例
    cout<<a<<endl;
    replace(a,100);
    cout<<a<<endl;
    char *b="asdasd";
    cout<<b<<endl;
    replace(b,20);
    cout<<b<<endl;
    char c[20]={ , };
    cout<<c<<endl;
    replace(c,20);
    cout<<c<<endl;
    char name[20];return 0;
}

 

结果:

技术分享

替换空格

标签:

原文地址:http://www.cnblogs.com/runninglzw/p/4477568.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!