题目描述

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

 

审题:

根据代码提示,传入类中的参数: 字符串地址str 和 字符串长度length,length没有什么用,通过对字符串的结束标志:\0 判断是否结束判断字符串长度!

 

代码:

Code1:

思路:从前向后记录‘ ’数目,从后向前替换‘ ’。

1 class Solution {
 2 public:
 3     void replaceSpace(char *str, int length) {
 4         int num = 0;
 5         int num_space = 0;
 6         while(str[num]!='\0')
 7         {
 8             if(str[num]==' ')
 9                 num_space++;
10             num++; //统计字符串字符总长度,包括'\0'’
11         }
12         ////统计总长度容易错:一个空格字符替换成2个字符,总长度增加2*num_space,而不是3*num_space
13         int num_replace=num+2*num_space;
14 
15         //while (num >= 0)
16         while(num_replace!=num)//使用该判断条件相比于上面判断条件可以提前结束!
17         {
18             if (str[num] == ' ')
19             {
20                 str[num_replace--]='0';
21                 str[num_replace--]='2';
22                 str[num_replace--]='%';
23             }
24             else
25             {
26                 str[num_replace--] = str[num];
27             }
28             num--;
29         }
30     }
31 };

注意:

1、字符串的传入参数是char类型的地址变量!(下面有关于字符串和字符变量的说明)

2、注意,引入变量要注意初始化初始值!

3、判断字符串长度结束标志:最后一个字符是否是:'\0'

4、统计总长度容易错:一个空格字符替换成2个字符,总长度增加2*num_space,而不是3*num_space

 

Code 2:

思路:应用length,提供的现成的字符串长度。

1 class Solution {
 2 public:
 3     void replaceSpace(char *str,int length) {
 4         int count=0;
 5         for(int i=0;i<length;i++){
 6             if(str[i]==' ')
 7                 count++;
 8         }
 9         for(int i=length-1;i>=0;i--){
10             if(str[i]!=' '){
11                 str[i+2*count]=str[i];
12             }
13             else{
14                 count--;
15                 str[i+2*count]='%';
16                 str[i+2*count+1]='2';
17                 str[i+2*count+2]='0';
18             }
19         }
20     }
21 };

 

难点:

字符变量和字符串变量:

  字符类型只有一个字节,就是只能储存一个字符,单个字母或者数字,例如a或者1,字符类型的赋值应该用' '号。例如 char a='a';就是将字母a赋给变量a。
  字符串可以储存多个字符,例如储存一句"I am fine"等。字符串的赋值要用" ";string a="I am fine!"就是将I am fine!这个字符串赋给字符串变量。值得注意的是字符串变量会在最后加多一个结束标志'\0'。例如char a='a',占一个字节,而string a="a"则占两个字节,因为除了储存字母a外还要储存'\0'这标志。所以char a="a"这个语句是不对的,因为变量a只占一个字节,而"a"则占两个字节,所以上述赋值表达式是非法的。