指引网

当前位置: 主页 > 编程开发 > C >

c/c++ 删除字符串中的空格的方法

来源:网络 作者:佚名 点击: 时间:2017-07-19 23:05
[摘要] 


编制一个字符串整理函数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<stdio.h>
#include<string.h>
#include<iostream.h>
#include<math.h >
void fun(char *str);

int main()
{
 char str[8]="a bcd";
 fun(str);
 cout<<str<<endl;
 return 0;
}
void fun(char *str)
{
    int i, n=strlen(str);
 cout<<n<<endl;
    char *p=str;
 for(i=0;i<n;)
    {
        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;   
}

------分隔线----------------------------