#数据结构与算法学习笔记#剑指Offer2:替换空格(Java、C/C++)

234 篇文章 1 订阅
80 篇文章 0 订阅
本文介绍了如何使用Java和C++解决《剑指Offer》中的字符串空格替换问题,通过函数实现将字符串中的每个空格转换为"%20",并提供了详细的代码示例。
摘要由CSDN通过智能技术生成

2018.7.21      《剑指Offer》从零单刷个人笔记整理(66题全)目录传送门​​​​​​​

如果熟悉replace和replaceAll的用法的话,java可以秒解。


题目描述

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


JAVA实现

/**
 * 
 * @author ChopinXBP
 * 请实现一个函数,将一个字符串中的空格替换成“%20”。
 * 例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
 *
 * 注意null、空串、连续空格
 *
 */

/*
 * 最佳解答
 * 
 public class Solution {
    public String replaceSpace(StringBuffer str) {
     if(str==null)
     {
        return null;
     }
     for(int i=0;i<str.length();i++)
     {
         char c = str.charAt(i);
         if(c==' ')
         {
            str.replace(i,i+1,"%20");
         }
      }
      String newstr = str.toString();
      return newstr;   
    }
}
	//神解答
	//return str.toString().replaceAll("\\s", "%20");
 */


public class StringReplace_2 {
	public static void main(String[] args){
		StringBuffer stringBuffer = new StringBuffer("");
		String string = replaceSpace(stringBuffer);
		System.out.println(string);
	}
	
	public static String replaceSpace(StringBuffer str) {
		if(str==null)return "字符串为空";
		
		int index = 0;
		//int end = str.length();
		while (index != str.length()) {
			int i;
			if ((i = str.indexOf(" ", index)) >= 0) {				
				index = i;
				str.replace(i, i + 1, "%20");
				//System.out.println(str);
			} else {
				break;
			}
		}
		return str.toString();
		
		
	}

}

C++最佳解答

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

#include "stdafx.h"

class Solution {

public:
	void replaceSpace(char *str, int length) {
		
		if (str == NULL || length < 0)
			return;

		int i = 0;
		int oldnumber = 0;//记录以前的长度
		int replacenumber = 0;//记录空格的数量
		while (str[i] != '\0')
		{
			oldnumber++;
			if (str[i] == ' ')
			{
				replacenumber++;
			}
			i++;
		}
		int newlength = oldnumber + replacenumber * 2;//插入后的长度
		if (newlength > length)//如果计算后的长度大于总长度就无法插入
			return;
		int pOldlength = oldnumber; //注意不要减一因为隐藏个‘\0’也要算里
		int pNewlength = newlength;
		while (pOldlength >= 0 && pNewlength > pOldlength)//放字符
		{
			if (str[pOldlength] == ' ') //碰到空格就替换
			{
				str[pNewlength--] = '0';
				str[pNewlength--] = '2';
				str[pNewlength--] = '%';

			}
			else //不是空格就把pOldlength指向的字符装入pNewlength指向的位置
			{
				str[pNewlength--] = str[pOldlength];

			}
			pOldlength--; //不管是if还是elsr都要把pOldlength前移

		}

};

#Coding一小时,Copying一秒钟。留个言点个赞呗,谢谢你#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值