c 语言 字符串消除空格,c/c 删除字符串中的空格的方法

编制一个字符串整理函数ver(char *),实现将已知字符串s中的前导空白符和尾随的空白类字符去掉,并将字符串非空白类字符之间的连续多个空白类字符缩减为一个

对于本题,还可以设置状态进行处理,开始时让flg为0,表示程序将遇到的空白类符是字符串的前导空白符;flg为1表示在复制过程中遇到了一个中间空白类字符;

flg为2表示一个空白符字符已经处理结束.

 1 char *ver(char *s)

2 {

3   int flg=0;

4   char *p=s,*q=s;

5   for (;*s;s ) {   /*顺序访问字符串s中的每个字符*/

6     if (*s==' ' || *s=='t' || *s=='n')   /*遇空白类字符*/

7       flg=(flg==2)?1:flg;

8       else {

9         if (flg==1)

10           *q =' ';  /*遇到空白类字符,复制下一个空白符*/

11         *q =*s;  /*复制当前字符*/

12         flag=2;   /*一个中间空白符列处理结束*/

13       }

14     }

15   *q=' ';

16   return p;

17 }

网上找的另一方法

string ls_string,ls_string_before,ls_string_after

integer li_tab,li_blank,li_blank_dbcs

ls_string = trim(sle_1.text)

//PB在处理TAB字符不分全角和半角,只用POS就可以,不用POSW

li_tab = Pos(ls_string, "~t")

DO WHILE li_tab > 0

ls_string_before = Mid(ls_string,1,li_tab - 1)

ls_string_after = Mid(ls_string,li_tab 1)

ls_string = ls_string_before ls_string_after

SetNull(li_tab)

li_tab = Pos(ls_string, "~t")

LOOP

//删除半角空格

li_blank = pos(ls_string ,' ')

DO WHILE li_blank > 0

ls_string_before = Mid(ls_string,1,li_blank - 1)

ls_string_after = Mid(ls_string,li_blank 1)

ls_string = ls_string_before ls_string_after

SetNull(li_blank)

li_blank = pos(ls_string ,' ')

LOOP

//删除全角空格

li_blank_dbcs = PosW(ls_string,' ')

DO WHILE li_blank_dbcs > 0

ls_string_before = MidW(ls_string,1,li_blank_dbcs - 1)

ls_string_after = MidW(ls_string,li_blank_dbcs 1)

ls_string = ls_string_before ls_string_after

SetNull(li_blank_dbcs)

li_blank_dbcs = PosW(ls_string,' ')

LOOP

方法四

#include

#include

#include

#include

void fun(char *str);

int main()

{

char str[8]="a bcd";

fun(str);

cout<

return 0;

}

void fun(char *str)

{

int i, n=strlen(str);

cout<

char *p=str;

for(i=0;i

{

if(*p!=' ')

str[i ] = *p;

p ;

}

str[i]=' ';

}

实例

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>p,则已复制过非空白字符*/

*(q-1)=' ';    /*如最后复制的是空白符,将其改为字符串结束符*/

else

*q=' ';  /*否则添加字符串结束符*/

return p;

}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值