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

2018.7.21 

题目描述

请实现一个函数,将一个字符串中的每个空格替换成“%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
* 在一个二维数组中,每一行都按照从左到右递增的顺序排序,
* 每一列都按照从上到下递增的顺序排序。请完成一个函数,
* 输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
*
*
*/

#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前移

		}

};

猜你喜欢

转载自blog.csdn.net/qq_20304723/article/details/81144799