要求把字符串中的多余空格删除掉,如" i am a leader ",修改为"i am a leader",要求只使用一次循环。
大概思路:遍历时第一次遇到空格,记录其下标,再遇到非空格时,把其写到空格处的后面,同时进行连续字符计数。非第一次遇到空格时,则统计字符清0。这样每次遇到一个新了字符子串时,都要在空格下标后面写入。
具体看代码:
#include<stdio.h>
#include<string.h>
char *trim(char *s)
{
//char s[] = " i am a leader";
if(NULL == s || 0 == strlen(s))
{
return s;
}
int i = 0;
char c;
int blank = -1;
printf("%s\n",s);
bool flag1 = false;//是否是字符
int flag2 = 0;//连续字符统计
while(c = s[i])
{
if(c == '\t' || ' ' == c)
{
if(-1 == blank )
{
blank = i;//记录空格开始处
}
flag1 = false;
flag2 = 0;
}
else
{
flag1 = true;
}
if(flag1)//是字符
{
if(flag2 == 0)//新的字符子串
{
if(blank != 0)//不是开头,则子串前加个空格
{
s[blank++] = ' ';
s[blank++] = c;
}
else
{
s[blank++] = c;
}
}
else
{
s[blank++] = c;
}
flag2++;
}
i++;
}
s[blank] = 0;
printf("%s\n",s);
printf("%d\n",blank);
return s;
}
int main(int argc,char*argv[])
{
trim(argv[1]);
return 0;
}