在学习中有时候我们自己写代码会无意的输入中文字符,尤其是空格,很难发现。有时我们拷贝网上的代码也会出现一些不合法的字符。这些字符在VS中压根就看不见,一个个找实在是麻烦,所以我写了这样一个小小的程序用于过滤中文字符:
#define _CRT_SECURE_NO_WARNINGS
#include "stdio.h"
#include "stdlib.h"
#include "memory.h"
#include "string.h"
int filter(){
char str[1024]={0};
char ch;
int i=0;
int flag=0;
FILE* fp = fopen("C:/Users/Mr.Hu/Desktop/two.cpp","r");
FILE* fp2 = fopen("C:/Users/Mr.Hu/Desktop/two(2).cpp","w");
if(fp==NULL){
printf("file open failed!");
return -1;
}
if(fp2==NULL){
printf("file2 open failed!");
return -1;
}
while (fread(str,1,sizeof(str),fp))
{
for(i;i<strlen(str);i++)
{
ch=str[i];
if(str[i]==-62&str[i+1]==-96){//中文空格
str[i]=str[i+1]=' ';
}
if(str[i]==-17&&str[i+1]==-68&&str[i+2]==-101){//中文分号
str[i]=';';
str[i+1]=str[i+2]=' ';
}
if(str[i]==-17&&str[i+1]==-69&&str[i+2]==-65){
str[i]=str[i+1]=str[i+2]=' ';
}
//中文左单引号
if(str[i]==-30&&str[i+1]==-128&&str[i+2]==-104){
str[i]=str[i+1]=' ';
str[i+2]='\'';
}
//中文右单引号
if(str[i]==-30&&str[i+1]==-128&&str[i+2]==-103){
str[i]='\'';
str[i+1]=str[i+2]=' ';
}
//中文左双引号
if(str[i]==-30&&str[i+1]==-128&&str[i+2]==-100){
str[i]=str[i+1]=' ';
str[i+2]='"';
}
//中文右双引号
if(str[i]==-30&&str[i+1]==-128&&str[i+2]==-99){
str[i]='"';
str[i+1]=str[i+2]=' ';
}
//中文逗号
if(str[i]==-17&&str[i+1]==-68&&str[i+2]==-116)
{
str[i]=',';
str[i+1]=str[i+2]=' ';
}
//中文左括号
if(str[i]==-17&&str[i+1]==-68&&str[i+2]==-120){
str[i]=str[i+1]=' ';
str[i+2]='(';
}
//中文右括号
if(str[i]==-17&&str[i+1]==-68&&str[i+2]==-119)
{
str[i]=')';
str[i+1]=str[i+2]=' ';
}
//printf("%c=%d ",ch,ch);
}
printf("%s",str);
fwrite(str,1,strlen(str),fp2);
memset(str,0,sizeof(str));
i=0;
}
fclose(fp);
fclose(fp);
return 1;
}
void main(){
filter();
system("pause");
return;
}
测试:
处理: