📄 gc_8_10.c
字号:
char *ver999(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)= '\0'; /*如最后复制的是空白符,将其改为字符串结束符*/
else
*q = '\0'; /*否则添加字符串结束符*/
return p;
}
char *ver9999(char *s) //书上的函数,在这个程序并没有用到
{
int flg = 0;
char *p = s, *q = s;
for(; *s; s++) { /*顺序访问字符串s中的每个字符*/
if(*s == ' ' || *s == '\t' || *s == '\n') /*遇空白类字符*/
flg = (flg == 2)?1:flg;
else { /*当前字符是其他字符*/
if(flg == 1)
*q++ = ' '; /*遇到过空白类字符,复制一个空白符*/
*q++ = *s; /*复制当前字符*/
flg = 2; /*一个中间空白符列处理结束*/
}
}
*q = '\n';
return p;
}
# include <stdio.h>
# include <string.h>
void copyach(char **q,char ch) /*复制一个非空白类字符*/
{
*((*q)++) = ch;
}
void copybach(char **q,char ch) /*复制一个空白符和非空白类字符*/
{
*((*q)++) = ' ';
*((*q)++) = ch;
}
/*状态转换表*/
int statbl[][3] = {{0, 2, 3}, /*初始状态*/
{1, 2, 3}, /*中间空白符状态*/
{1, 2, 3}}; /*非空白符状态*/
/*语义操作表*/
void (*funtbl[][3])(char **,char) = {{NULL,copyach,NULL},
{NULL,copybach,NULL},
{NULL,copyach,NULL}};
char *ver(char *s) /*识别函数*/
{
int c,ckind,
status = 0; /*置初始状态*/
char *p = s, *q = s;
for(;status != 3; s++) { /*顺序访问字符串s中的每个字符*/
c = *s;
/*分类当前字符*/
if(c == ' ' || c == '\t' || c == '\n')
ckind = 0; /*空白类字符*/
else if (c == '\0') ckind = 2; /*字符串结束符*/
else ckind = 1; /*非空白类字符*/
if(funtbl[status][ckind]) /*如有转换函数*/
(*funtbl[status][ckind])(&q,c); /*执行相应函数*/
status = statbl[status][ckind]; /*设置新的状态*/
}
*q = '\0';
return p;
}
void main()
{
int x; /*选项*/
char s[120], *ss,*ss2,*ss3;
printf("输入字符串,\n");
gets(s);
printf("有三种方法处理字符串,输入选项1,2,3\n");
printf("1\n");
printf("2\n");
printf("3\n");
scanf("%d",&x);
switch(x) {
case 1:ss = ver(s);
printf("结果字符串为 %s,其长度为 %d",ss,strlen(ss));
break;
case 2:ss2 = ver999(s);
printf("\n另一种方法: 结果字符串为 %s,其长度为 %d",ss2,strlen(ss2));
break;
case 3:ss3 = ver9999(s);
printf("\n另一种方法: 结果字符串为 %s,其长度为 %d",ss3,strlen(ss3));
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -