替换空格,excel替换空格永利澳门游戏网址304:

更迭空格,excel替换空格

 

主题材料:请完成三个函数,把字符串中的每一种空格替换到“%20”。举例输入“We are happy.”,则输出“We%20are%20happy.”。

思路:大家能够先遍历三回字符串,这样就能够总计出字符串中空格的总额,并能够通过总计出替换之后的字符串的总参谋长度。每替换贰个空格,长度扩充2,因而替换未来字符串的尺寸等于原本的尺寸加上2加倍空格数目。大家以字符串”We
are happy.”为例,”We are
happy.”那个字符串的长度是14(富含结尾符号’’卡塔 尔(阿拉伯语:قطر‎,里面有多个空格,由此替换之后字符串的长度是18。

     
我们从字符串的背后开始复制和替换。首先思忖多少个指针,P1和P2。P1指向原始字符串的最后,而P2指向替换之后的字符串的最终(如图(a卡塔 尔(英语:State of Qatar)所示卡塔 尔(英语:State of Qatar)。接下来我们前行挪动指针P1,各个把它指向的字符复制到P2指向的职位,直到遇到首个空格截至。当时字符串满含如图(b卡塔尔所示,莲红背景的区域是做了字符拷贝(移动卡塔尔国的区域。碰到第三个空格之后,把P1向前移动1格,在P2以前插入字符串”%20″。由于”%20″的尺寸为3,相同的时候也要把P2向前挪动3格如图(c卡塔 尔(阿拉伯语:قطر‎所示。

    
大家跟着向前复制,直到蒙受第一个空格(如图(d卡塔 尔(英语:State of Qatar)所示卡塔 尔(阿拉伯语:قطر‎。和上一次同样,大家再把P1向前移动1格,并把P2向前挪动3格插入”%20″(如图(e卡塔 尔(英语:State of Qatar)所示卡塔 尔(英语:State of Qatar)。当时P1和P2指向同壹地点,申明全体空格都曾经替换完结

永利澳门游戏网址304 1

 

 1 #include <string>
 2 #include "stdafx.h"
 3 
 4 void ReplaceBlank(char string[], int length)
 5 {
 6     if(string == NULL && length <= 0)
 7         return;
 8 
 9     int originalLength = 0;
10     int numberOfBlank = 0;
11     int i = 0;
12 
13     while(string[i] != '')
14     {
15         ++ originalLength;
16 
17         if(string[i] == ' ')
18             ++ numberOfBlank;
19 
20         ++ i;
21     }
22     
23     //newLength 为把空格替换为'%20'之后的长度 
24     int newLength = originalLength + numberOfBlank * 2;
25     if(newLength > length)
26         return;
27 
28     int indexOfOriginal = originalLength;
29     int indexOfNew = newLength;
30     
31     //若没有空格 直接跳过 
32     while(indexOfOriginal >= 0 && indexOfNew > indexOfOriginal)
33     {
34         if(string[indexOfOriginal] == ' ')
35         {
36             string[indexOfNew --] = '0';
37             string[indexOfNew --] = '2';
38             string[indexOfNew --] = '%';
39             //先使用再减一 
40         }
41         else
42         {
43             string[indexOfNew --] = string[indexOfOriginal];
44         }
45 
46         -- indexOfOriginal;
47     }
48 }
49 
50 int main()
51 {
52     const int length = 100;
53 
54     char string[length] = "We are happy";
55     printf("%sn",string);
56     ReplaceBlank(string, length);
57     printf("%sn",string);
58     
59     char string1[length] = " ";
60     printf("%sn", string1);
61     ReplaceBlank(string1, length);
62     printf("%sn", string1);
63     
64     return 0;
65 }

永利澳门游戏网址304 2

 

标题:请完结三个函数,把字符串中的各种空格替换来%20。举例输入We are
happy.,则输出We%20are%20happy.。 思路:大家可…

难题:请落成一个函数,把字符串中的各种空格替换到“%20”。举例输入“We
are happy.”,则输出“We%20are%20happy.”。

     
看见这么些标题,我们先是应当想到的是本来叁个空格字符,替换之后成为’%’、’2’和’0’这3个字符,因而字符串会变长。若是是在原来的字符串上做替换,那么就有希望覆盖改正在该字符串前边的内部存款和储蓄器。如若是成立新的字符串并在新的字符串上做替换,那么大家能够团结分配丰盛多的内部存款和储蓄器。

      在这里边介绍意气风发种时光复杂度为O(n)的解法。 

     
大家得以先遍历二次字符串,那样就能够总括出字符串中空格的总和,并能够通过总括出替换之后的字符串的总参谋长度。每替换一个空格,长度扩大2,由此替换现在字符串的尺寸等于原本的长短加上2加倍空格数目。我们以字符串”We
are happy.”为例,”We are
happy.”那几个字符串的长短是14(包罗结尾符号’’卡塔尔,里面有多个空格,由此替换之后字符串的长度是18。

     
大家从字符串的后面开首复制和替换。首先思谋三个指针,P1和P2。P1指向原始字符串的终极,而P2指向替换之后的字符串的末尾(如图(a卡塔尔国所示卡塔 尔(英语:State of Qatar)。接下来咱们上前移动指针P1,各个把它指向的字符复制到P2指向的职位,直到遇见第贰个空格结束。那个时候字符串满含如图(b卡塔 尔(英语:State of Qatar)所示,粉红背景的区域是做了字符拷贝(移动卡塔尔国的区域。碰到第三个空格之后,把P1向前挪动1格,在P2以前插入字符串”%20″。由于”%20″的尺寸为3,同期也要把P2向前挪动3格如图(c卡塔尔所示。

    
大家跟着向前复制,直到遇见第2个空格(如图(d卡塔尔国所示卡塔 尔(英语:State of Qatar)。和上贰回类似,我们再把P1向前移动1格,并把P2向前挪动3格插入”%20″(如图(e卡塔 尔(阿拉伯语:قطر‎所示卡塔 尔(英语:State of Qatar)。那时候P1和P2指向同一职分,申明全部空格都早已替换完毕

永利澳门游戏网址304 3

注:图中蕴藏阴影的区域代表被移动的字符。(a卡塔尔把第二个指针指向字符串的末段,把第4个指针指向替换之后的字符串的末梢。(b卡塔尔依次复制字符串的情节,直至第二个指针碰着第叁个空格。(c卡塔 尔(英语:State of Qatar)把第三个空格替换来’%20’,把第一个指针向前挪动1格,把第二个指针向前移动3格。(d卡塔尔依次向前复制字符串中的字符,直至蒙受空格。(e卡塔尔国替换字符串中的尾数第4个空格,把第一个指针向前挪动1格,把第3个指针向前挪动3格。

参照他事他说加以侦察代码:

 1 /*length 为字符数组string的总容量*/
 2 void ReplaceBlank(char string[], int length)
 3 {
 4     if(string == NULL && length <= 0)
 5         return;
 6  
 7     /*originalLength 为字符串string的实际长度*/
 8     int originalLength = 0;
 9     int numberOfBlank = 0;
10     int i = 0;
11     while(string[i] != '')
12     {
13         ++ originalLength;
14  
15         if(string[i] == ' ')
16             ++ numberOfBlank;
17  
18         ++ i;
19     }
20  
21     /*newLength 为把空格替换成'%20'之后的长度*/
22     int newLength = originalLength + numberOfBlank * 2;
23     if(newLength > length)
24         return;
25  
26     int indexOfOriginal = originalLength;
27     int indexOfNew = newLength;
28     while(indexOfOriginal >= 0 && indexOfNew > indexOfOriginal)
29     {
30         if(string[indexOfOriginal] == ' ')
31         {
32             string[indexOfNew --] = '0';
33             string[indexOfNew --] = '2';
34             string[indexOfNew --] = '%';
35         }
36         else
37         {
38             string[indexOfNew --] = string[indexOfOriginal];
39         }
40  
41         -- indexOfOriginal;
42     }
43 }

 

 完整代码:

 1 #include<iostream>
 2 #include<string.h>
 3 using namespace std;
 4  
 5 /*length 为字符数组string的总容量*/
 6 void ReplaceBlank(char string[], int length)
 7 {
 8     if(string == NULL && length <= 0)
 9         return;
10  
11     /*originalLength 为字符串string的实际长度*/
12     int originalLength = 0;
13     int numberOfBlank = 0;
14     int i = 0;
15     while(string[i] != '')
16     {
17         ++ originalLength;
18  
19         if(string[i] == ' ')
20             ++ numberOfBlank;
21  
22         ++ i;
23     }
24  
25     /*newLength 为把空格替换成'%20'之后的长度*/
26     int newLength = originalLength + numberOfBlank * 2;
27     if(newLength > length)
28         return;
29  
30     int indexOfOriginal = originalLength;
31     int indexOfNew = newLength;
32     while(indexOfOriginal >= 0 && indexOfNew > indexOfOriginal)
33     {
34         if(string[indexOfOriginal] == ' ')
35         {
36             string[indexOfNew --] = '0';
37             string[indexOfNew --] = '2';
38             string[indexOfNew --] = '%';
39         }
40         else
41         {
42             string[indexOfNew --] = string[indexOfOriginal];
43         }
44  
45         -- indexOfOriginal;
46     }
47 }
48  
49 int main()
50 {
51     const int length = 100;
52  
53     char string[length] = "hello world.";
54  
55     ReplaceBlank(string, length);
56  
57     int newLength = strlen(string);
58 /*
59     int newLength = 0;
60     int j = 0;
61     while(string[j] != '')
62     {
63         newLength++;
64         ++j;
65     }
66 */
67     for(int i = 0 ; i < newLength ; ++i)
68         cout<<string[i];
69     cout<<endl;
70  
71     return 0;
72 }

发表评论

电子邮件地址不会被公开。 必填项已用*标注