已知一个字串由GBK汉字和ansi编码的数字字母混合组成,编写c语言函数实现从中去掉所有ansi编码的字母和数字(包括大小写),要求在原字串上返回结果。
函数接口为:int filter_ansi(char* gbk_string)
注:汉字的GBK编码范围是0x8140-0xFEFE
我这里没有区别编码的问题,汉字就是占两个字节,并且最高位为1
#include <stdio.h> #include <stdlib.h>
int isnum(int ch) { if(ch>='0' && ch<='9') return 1; else return 0; }
int iszimu(int ch) { if((ch>='A' && ch<='Z') || (ch>='a' && ch<='z')) return 1; else return 0; }
int filter_ansi(char* gbk_string) { int i = 0; int filter = 0; char* tmp = gbk_string; while(*tmp) { if(isnum(*tmp) || iszimu(*tmp)) { filter++; tmp++; } else if(*tmp&0x80) { gbk_string[i] = *tmp; i++; tmp++; gbk_string[i] = *tmp; i++; tmp++; } else tmp++; } gbk_string[i] = '\0'; return filter; } int main(int argc, char *argv[]) { char gbk_string[] = "a1我b2是c3A谁"; printf("original str is %s\n", gbk_string); printf("filter %d chars\n", filter_ansi(gbk_string)); printf("after the str is:%s\n", gbk_string); system("PAUSE"); return 0; }
|
阅读(2074) | 评论(3) | 转发(0) |