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

去除字符串首部和尾部的空格

时间:2014-12-05 00:28:01      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:style   blog   ar   color   sp   for   div   log   bs   

思路:

  • 记下第一个非空字符的位置temp1,记下头部空格的个数space_count_head以及尾部空格的个数space_count_tail。
  • 空格总数length_new=space_count_head+space_count_tail;
  • 将以temp1为起始位置,长度为length_new的字符串原址拷贝到源字符串上。

源代码如下:

void stripSpace(char str[],int length)
{
   if(str==NULL) return;
   char *temp = str;
   int last = length-1;
   int space_count_head = 0;
   int space_count_tail = 0;
   while(*temp== )
   {
       space_count_head++;
       temp++;
   }
   while(str[last]== )
   {
       space_count_tail++;
       last--;
   }
   int length_new = length-space_count_head-space_count_tail;
   int len = length_new;
   char *ret = str;
   while(length_new>0)
   {
       *str++= *temp++;
       length_new--;
   }
   ret[len]=\0;
}

main函数如下所示:

int main()
{
    char str[] = " hello world  ";
    char *p = str;
    cout << "before strip:" << endl;
    cout << "str is " << endl;
    cout << str << endl;
    cout << "before: strlen(str) " << strlen(str) << endl; 
    int length = strlen(str);
    stripSpace(str,length);
    cout << "after strip:" << endl;
    cout << "str is " << endl;
    cout << str << endl;
    cout << "after: strlen(str) " << strlen(str) << endl; 
    return 0;
}

开始我将原始字符串定义为:char *str = " hello world  ",发现str在被调用函数中不能进行原址修改,如 str[1] = ‘d‘是不允许的。

另外一个调了很久的bug就是在最后加‘\0‘时直接加在了str上,str[len]=‘\0‘,实际上str的位置在进行原址拷贝的时候已经变动,这时会产生野指针,所以应该记下str的起始位置。

去除字符串首部和尾部的空格

标签:style   blog   ar   color   sp   for   div   log   bs   

原文地址:http://www.cnblogs.com/hubavyn/p/4145224.html

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