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

来源:互联网 发布:oa软件开发 编辑:程序博客网 时间:2024/06/03 14:51

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

思路:(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]==' ')//当遇到空格,则在新的加上%2040         {41 //            printf("遇到空格/n");42             string[indexOfNew--] = '0';43             string[indexOfNew--] = '2';44             string[indexOfNew--] = '%';45         }46         else47             {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);//包含/059 //    int Strlen = strlen(string);//不包含/060     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 }

 

0 0
原创粉丝点击