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