今天上午遇到了个面试模拟题,不是很难,经常能看到这样相同或相似的题,但是突然想不到很好的办法,晚上整理下思路,写了下来
#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));
}
望大家批评指正