实例五十三:字符串处理
问题描述:
编制一个字符串处理程序,实现将已知字符串 s 中的前导空白类字符和尾随的空白字符去掉,并将字符串字符中之间的连续多个空白字符缩减为一个空白字符。
算法思路:
按照题目要求去整理字符串,首先用一个跳过空白符的循环,去掉字符串 s 中的前导空白字符;然后顺序访问字符串 s 的其余字符,对每个顺序访问的当前字符,检查该字符是否为空白字符,若是,用一个循环跳过随后的多余空白字符,直至字符串 s 访问结束;最后要考虑的是当压缩过程结束时,若其最后一个复制字符若为空白符,则要把该空白符改为字符串结束符。
/*字符串处理*/
#include<stdio.h>
#include<string.h>
char *ver(char *s)
{
char *p=s,*q=s;
for(;*s==' '||*s=='\t'||*s=='\n';s++); /*跳过前导空格的循环*/
for(;*s;) /*顺序访问字符串s中的每个字符*/
{
*q++=(*s=='\t'||*s=='\n')?' ':*s;
if(*s==' '&&*s=='\t'&&*s=='\n')
s++;
else
while(*s==' '||*s=='\t'||*s=='\n') /*跳过中间连续的多余空白符*/
s++;
}
if(q>p&&*(q-1)==' ')
*q = '\0';
else
*q='\0';
return p;
}
int main()
{
char s[100];
gets(s);
printf("%s\n",s);
char *ss;
ss = ver(s);
printf("%s",ss);
return 0;
}