使用C代码去除字符串中的空格

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. 注意上述代码中的注释部分即代码书写方式。

转载于:https://www.cnblogs.com/ZJUKasuosuo/archive/2012/08/09/2630423.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值