首页 > 代码库 > 去除字符串首部和尾部的空格
去除字符串首部和尾部的空格
思路:
- 记下第一个非空字符的位置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的起始位置。
去除字符串首部和尾部的空格
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。