过滤代码中的中文字符(C)

时间:2023-01-18 18:31:49

在学习中有时候我们自己写代码会无意的输入中文字符,尤其是空格,很难发现。有时我们拷贝网上的代码也会出现一些不合法的字符。这些字符在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;
}

测试:
过滤代码中的中文字符(C)
处理:
过滤代码中的中文字符(C)