今天上午遇到了个面试模拟题,不是很难,经常能看到这样相同或相似的题,但是突然想不到很好的办法,晚上整理下思路,写了下来
#include<stdio.h> #include<string.h> #include<stdlib.h> //删除字符串首部和尾部的空格,中间的有超过一个的空格的话就换成一个空格 //例子:“ hsf g dfgg ”,"hsf g dfgg" //" ","" //思路:先把首部和尾部的空格找到,在循环中就不循环它们(前两个while循环做的事), char* Trim(char* lpstr) { int len=strlen(lpstr); char *s=(char *)malloc(sizeof(char)*len+1); strcpy(s,lpstr); int start=0,end=len-1,i=0,j=0,num=0;//num代表空格出现的次数,j和i分别为数组s的两个下表索引,j从0开始,最后得到删除空格的新的数组,i从start开始,将i对应的字符加入到j里面,i始终大于等于j while(s[start]==‘ ‘) { start++; } while(s[end]==‘ ‘) { end--; } for(i=start;i<=end;i++) { if(s[i]!=‘ ‘) { if(num>0) //代表在这个字符之前出现过空格,所以要增加一个空格,处理完之后num就清0 { s[j++]=‘ ‘; num=0; } s[j]=s[i]; j++; } if(s[i]==‘ ‘) { num++; //flag=1; } } s[j]=‘\0‘;//最后j位置上加上‘\0‘,代表数组在这里结束 return s; } int main() { char *ssss=" fgj fds f ds "; printf("%s",Trim(ssss)); }
望大家批评指正
原文:http://my.oschina.net/a20092173/blog/502493