编制一个字符串整理函数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;
}
|