题目描述
请实现一个函数,将一个字符串中的每个空格替换成“%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"则占两个字节,所以上述赋值表达式是非法的。