1. 使用C代码去除字符串中的空格,void removeSpace(char* str)
2. 解析:
(1)主要考察C编程功底
(2)需要注意的问题:代码书写方式,整洁书写代码。
(3)虽然是一道简单的题目,但是很考察基础能力。
3. 代码:
View Code
1 #include <iostream> 2 #include <cassert> 3 4 using namespace std; 5 6 //这中编码方式存在错误 7 void removeSpace1(char *str) { 8 char *p1 = str, *p2 = str; 9 cout<<str<<endl; 10 //如下写法存在一个问题:如果str最后一位为' ', 11 //此时被循环while p2走到最后的'\0'处,在*p1=*p2; 12 //之后,p2又自加一次,这时候的p2指向已经不确定了。 13 do{ 14 while (*p2 == ' ') 15 { 16 p2++; 17 } 18 *p1=*p2; 19 p1++; 20 p2++; 21 }while ((*p2)!='\0'); 22 //*p1='\0'; 23 //cout<<str<<endl; 24 } 25 26 void removeSpace2(char *str) { 27 char *p1 = str, *p2 = str; 28 //改成下面的方式先判断*p2是否等于'\0' 29 //之后再p2++,以后都要以这种方式来书写代码, 30 //整洁而且不会出错 31 do{ 32 while (*p2 == ' ') 33 { 34 p2++; 35 } 36 *p1=*p2; 37 p1++; 38 }while ((*p2++)!='\0'); 39 *p1='\0'; 40 cout<<str<<endl; 41 } 42 43 //这是别人写的代码,感觉很简练,好精致 44 void removeSpace3(char *str) 45 { 46 assert(str); 47 char *p1 = str, *p2 = str; 48 do{ 49 while (*p2 == ' ') 50 { 51 p2++; 52 } 53 }while (*(p1++) = *(p2++)); //这一句的意思是:先*p1=*p2,p2++;之后判断*p1是否为0,最后p1++ 54 //这样写虽然很巧妙,但是不容易懂,以后注意熟悉这种写代码方式 55 cout<<str<<endl; 56 } 57 58 //这是我第一时间写出的代码,虽然是正确的,但是tmp+i存在指针跳动, 59 //每次都需要内存寻址,肯定会降低效率 60 void RemoveSpace(char* str) 61 { 62 if (!str) 63 { 64 return ; 65 } 66 int i=0; 67 int j=-1; 68 char* tmp=str; 69 while (*(tmp+i)!='\0') 70 { 71 if (*(tmp+i)!=' ') 72 { 73 j++; 74 *(tmp+j)=*(tmp+i); 75 } 76 i++; 77 } 78 *(tmp+j+1)='\0'; 79 cout<<str<<endl; 80 } 81 82 int main() 83 { 84 //char *str="abc d e f "; //这样写的字符串str是不可以改变的,即是常量字符串, 85 //相当于const char* str="abc d e f "; 86 char str[]="abc d e f "; 87 cout<<sizeof(str)<<endl; //12,包括最后的一个'\0' 88 cout<<strlen(str)<<endl; //11,计算length时,不包括最后的一个'\0' 89 //RemoveSpace(str); 90 removeSpace3(str); 91 return 0; 92 }
4. 注意上述代码中的注释部分即代码书写方式。