• 替换字符串中的空格


    题目描写叙述:

    请实现一个函数,将一个字符串中的空格替换成“%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;
    }













  • 相关阅读:
    vector, list, deque的选用(vector适用少量对象,list适用大量对象),以及效率问题
    MSYS是一个小型的GNU环境,包括基本的bash,make等等,与Cygwin大致相当(双击“D:MinGWmsys1.0msys.bat”,启动MinGW终端)
    你在为谁工作(陈凯元 2005 机械工业出版社)——薪水算什么,要为自己而工作;薪水只是工作的一种回报方式
    Net Core2.0下使用Dapper
    编程思想与算法
    NET Core Hosting
    windows/Linux下设置ASP.Net Core开发环境并部署应用
    OAuth2.0
    TF-IDF模型
    每分钟达百万的数据请求
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/6887803.html
Copyright © 2020-2023  润新知