码迷,mamicode.com
首页 > 其他好文 > 详细

字符串--两头堵模型解析

时间:2015-05-05 12:24:19      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:

题目:

有一个字符串开头或结尾含有n个空格("   abcdefgdddd    "),欲去掉前后空格,返回一个新字符串。

 1 // 字符串两头堵模型
 2 int TrimSpaceStr(char *p, char *buf)
 3 {
 4     int  rv   = 0;
 5     char *str = p;
 6     int  i    = 0;              // 搜索指针变量,从字符串头部开始
 7     int  j    = strlen(str) - 1;// 搜索指针变量,从字符串尾部开始
 8     int  len  = 0;              // 字符串的有效长度
 9 
10     if(str==NULL || buf==NULL)
11     {
12         rv = -1;
13         printf("Function TrimSpaceStr() check (str==NULL || buf==NULL) Error: %d", rv);
14         return rv;
15     }
16 
17     while(isspace(str[i]) && i<j)
18     {
19         i++;
20     }
21 
22     while(isspace(str[j]) && j>=0)
23     {
24         j--;
25     }
26     
27     len = j-i+1;
28 
29     strncpy(buf, str+i, len);
30 
31     buf[len] = \0;
32     return rv;
33 }
34 int main()
35 {
36     int ret = 0;
37 
38     // 在栈区分配了内存空间,拷贝了一份
39     char str[] = "   abcdefgdddd    ";
40 
41     char p1[20];
42 
43     ret = TrimSpaceStr(str, p1);
44 
45     if(ret != 0)
46     {
47         printf("Function DelSpace() Error: %d \n", ret);
48     }
49     
50     printf("After Delete Space: %s\n", p1);
51 
52     return 0;
53 }

分析: 先看函数int TrimSpaceStr(char *p, char *buf), 在主调函数中分配内存,传进被调用函数, 在char *p前面最好加const, 可以防止意外修改源字符串
   再看int main(), 将字符串拷贝进临时分配在首地址在str中的内存块中char str[] = "   abcdefgdddd    ", 同理char p1[20], 将两者作为实参传进函数
TrimSpaceStr(str, p1);

注意点: 若在主函数中定义的是char *p = "   abcdefgdddd    ",则在函数中不可以修改*p,字符串在常量区

总结:

1. 字符串可以在栈区str[]="",堆区char *p = malloc,还有常量区分配内存char *p = "",千万小心!!

2. 不要轻易的修改从别的地方传过来的内存块的内容,真的要修改也要新的自己开辟一块内存!

字符串--两头堵模型解析

标签:

原文地址:http://www.cnblogs.com/gossiplee/p/4478586.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!