基本上求职者进行笔试没有不考字符串的。字符串也是一种相对简单的数据结构,容易被考。事实上,字符创也是一个考验程序猿编程规范和编程习惯的重要考点。

  

1、替换空格:实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“we are happy。”则输出“we%20are%20happy。”

    答案:用一个空的字符串去替换%,2,0三个字符,那么原字符就会变长从而覆盖掉后面的字符,我么可以考虑创建一个新的字符串并在新的字符串上面做替换,那样就能够分配足够的内存了。在这里我们可以考虑从后往前去替换字符串。这里创建两个指针

    

 1 #include<iostream>
 2 #include <string>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<stdlib.h>
 6 using namespace std;
 7 /*
 8         算法原理:准备两个指针p1,p2;p1指向原始字符串的末尾,p2指向替换之后的字符串的末尾。接下来我们向前移动指针p1,
 9                 逐个把它指向的字符复制到p2指向的位置,知道碰到第一个空格为止,
10         算法:先遍历一次字符串,记录空格的数目,在计算新的字符数组的长度
11                 在从后往前进行替换
12 */
13 char *copystr(char *s)
14 {
15     int len=strlen(s);//字符串的长度
16     int blank=0;//表示空格的数目
17     if(len==0)
18     {
19         return NULL;
20     }
21     if(s==NULL)
22     {
23         return NULL;
24     }
25     
26     for(int i=0; i<len; i++) //判断字符串,确定空格的数目,从而确定新的字符串所需的个数
27     {
28         if(s[i]==' ')
29             blank++;
30     }
31     if(blank==0)
32         return s;
33     int new_len=blank*2+len;//计算新的字符数组的长度(本来不该加一,但是最后的输出要求加一)
34     int l=new_len+1;//这里'\0'也算一个长度
35     char *str1;
36     for(int i=len; i>=0; i--)//算法:有空格就赋值,没有空格直接复制,从后往前复制
37     {
38         if(s[i]!=' ')//从后往前复制
39         {
40             str1[l-1]=s[i];
41             l--;
42         }
43         else//转换空格
44         {
45             str1[l-1]='0';
46             str1[l-2]='2';
47             str1[l-3]='%';
48             l-=3;
49         }
50     }
51     return str1;
52 }
53 int main()
54 {
55 static char str[10000000];
56     gets(str);
57     char *dest = copystr(str);
58     if(dest != NULL)
59         puts(dest);
60     dest = NULL;
61     return 0;
62 
63 }
View Code

相关文章:

  • 2021-04-03
  • 2022-12-23
  • 2021-12-15
  • 2022-12-23
  • 2022-12-23
  • 2021-05-31
  • 2022-01-10
  • 2021-09-18
猜你喜欢
  • 2021-07-02
  • 2022-12-23
  • 2021-10-18
  • 2022-12-23
  • 2021-12-06
  • 2021-10-23
相关资源
相似解决方案