剑指offer面试题4 替换空格(c)


本题最大的困难是如何在不新建新的数组下完成空格替换,主要考察数组指针的运用

思路:(1)找出字符串空格的长度,从而确定新的子串尾指针的位置所在;

         (2)通过遍历找出空格,string[indexOfNew--]依次附上%20三个字符,indexOfOriginal--

注:并没有通过实际指针而是通过字符串下标操作,起始时均指向末尾位置

 1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 /*
5 *Author xsf
6 *剑指offer,替换空格
7 */
8 //求出传入数组的空格长度
9 int GetBankLen(char str[])
10 {
11 int BankNum = 0;
12 char *p = str;
13 while(*p!='\0')
14 {
15 if(*p==' ')
16 BankNum++;
17 p++;
18 }
19 return BankNum;
20 }
21 /*置换空格的函数
22 length是字符数组string的总容量
23 */
24 void ReplaceBlank(char string[],int length)
25 {
26 if(string==NULL||length<=0)//安全性判断
27 return;
28 int BankNum = GetBankLen(string);//获取输入string的空格数目
29 int newLength = length + BankNum*2; //移动数组后的总长度
30 // char *str1 = string+length-1;//第一个指针指向数组的最后\0位置
31 // if(*str1 =='\0')
32 // printf("指向了最后的\0");
33 // char *str2 = string+newLength-1;//第二个指针指向替换后的最后\0位置
34 /*移动指针*/
35 int indexOfOriginal = length;
36 int indexOfNew = newLength;
37 while(indexOfOriginal>=0&&indexOfNew>indexOfOriginal)
38 {
39 if(string[indexOfOriginal]==' ')//当遇到空格,则在新的加上%20
40 {
41 // printf("遇到空格/n");
42 string[indexOfNew--] = '0';
43 string[indexOfNew--] = '2';
44 string[indexOfNew--] = '%';
45 }
46 else
47 {
48 string[indexOfNew--] = string[indexOfOriginal];
49 }
50 indexOfOriginal--;
51
52 }
53 }
54
55 int main(int argc,char *argv[])
56 {
57 char string[] = "X S F";
58 int Totallen = sizeof(string)/sizeof(char);//包含/0
59 // int Strlen = strlen(string);//不包含/0
60 printf("替换前%s\n",string);
61 ReplaceBlank(string,Totallen);
62 printf("替换后%s\n",string);
63 // printf("len=%d\n",Totallen);
64 // printf("str=%d\n",Strlen);
65 // int BankNum = GetBankLen(string);
66 // printf("空格长度为%d\n",BankNum);
67
68 }

 

智能推荐

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
© 2014-2019 ITdaan.com 粤ICP备14056181号  

赞助商广告