Pro4 替换空格

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

思路:(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 }
时间: 2024-10-21 18:32:05

Pro4 替换空格的相关文章

Pro4 替换空格(java)

注:利用java中stringBuilder,append,length方法很方便的解决字符串问题 1 /* 2 * 剑指offer 替换空格 3 * xsf 4 * */ 5 6 /*开始替换空格的函数,length为原数组的长度,java中length不计算/0*/ 7 class BlankFun{ 8 public String replaceBank(String str) { 9 if(str==null)//输入安全判断 10 return null; 11 //构建一个新的Str

【剑指offer】第四题 替换空格

/** * 剑指offer 第4题 替换空格 * 特点:1.先扫描串中的空格数,计算好替换后的长度 * 2.使用双指针,从后面开始向前替换,避免从前开始每次替换后就要移动后面的所有的数据 * 测试用例:特殊:有多个空格 * 错误:数组长度不够,字符串为空 * */ package javaTrain; public class Offer4 { public static void main(String[] args) { String a = "Hello I am Daisy Dong!&

替换空格 4

先遍历每个字符统计空格数 :String.charAt() ? ? 根据空格数计算新的长度 :newLength=oriLength+2*NumOfBlank ? ? 新建一个newLength长度的字符数组tempChars用于存放替换空格之后的字符数组 ? ? 利用System.arraycopy函数将原字符串转换为数组拷贝到新的字符数组tempChars中 ? ? 从新字符数组末尾开始遍历,用一个index1指向新字符数组末尾,用一个index2指向原字符数组末尾所在新字符数组的位置,将原

java实现——004替换空格

1.创建新的字符串 1 public class T004 { 2 public static void main(String[] args){ 3 System.out.println(replaceBlank("we are happy")); 4 } 5 public static String replaceBlank(String s){ 6 String r = "%20"; 7 String result = ""; 8 for(

【C语言】字符串替换空格:实现一个函数,把字符串里的空格替换成“%20”

//字符串替换空格:实现一个函数,把字符串里的空格替换成"%20" #include <stdio.h> #include <assert.h> void replace(char *src) { assert(src); int OldLen = 0; //原字符串长度 int NewLen = 0; //新字符串长度 int BlackNum = 0; //空格数量 int NewBack = 0; //新字符串尾部 int OldBack = 0; //原

【c语言】字符串替换空格:请实现一个函数,把字符串中的每个空格替换成“%20”

// 字符串替换空格:请实现一个函数,把字符串中的每个空格替换成"%20". // 例如输入"we are happy.",则输出"we%20are%20happy." #include <stdio.h> #include <assert.h> char* replace(char* p) { char* ret = p; int num = 0; int oldlen = 0; int newlen = 0; char

剑指Offers 题目1510:替换空格

题目1510:替换空格 题解报告:  水题,注意数据,我是用最简单的办法,一扫而替换,判断的时候注意,s[i]!=0,全局数组初始化默认为0,我开始用了strlen(s)判断,超了不少时,哎呀! #include <stdio.h> #include <stdlib.h> #include <string.h> char s[10000001]; int main() { while(gets(s)){ for(int i=0; s[i]!=0; i++){ if(s[

替换空格--《剑指offer》

如题所示,题目很简单,替换空格,将字符串中的空格替换为%20: 即"we are happy"替换成"we%20are%20happy": 如果每当我们遇到一个空格就将字符串向后平移两位,这样复杂度就是O(n2)了,这样的方法是不可取的,按照作者的来说,offer已不足拿到了: 而当我们反向从字符串末尾开始遍历,复杂度仅为O(n),当然前提的是该字符串有足够空间,否则替换会失败. 了解到思想之后程序也就比较简单了,发现自己的与作者的写的也比较类似,就此贴上了...

替换空格-剑指Offer

替换空格 题目描述 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 思路 遍历一遍,统计空格数量,扩大相应容量 两个指针,一个指向旧的长度,一个新的长度,从后往前走,一个一个走,遇到空格,right走3个,left走1个 left == right或left == 0就不用接着走了 代码 public class Solution02 { public String replaceSpac