2020-10-31

一个中文C语言源码编辑器

可以对C语言30个关键字自定义相应中文标示符,程序自动翻译成对中文符号进行相匹配的修改
//有点长 匹配过程可能引发内存泄露等问题,而引起中断 也可能因不同IDE 编译不过去的问题
我用的是 Visual Studio 2019 可能还有很多问题 希望大家一起指正 我的英文不好 30个字符拼写 都经常错误 所以动手写了这个 中文编辑器

#include<stdio.h>
#include<string.h>
#include "scls.h"
#include <stdlib.h>

#define MAX 255
 int MAXCHEACKCOUNT = 1;

  char* kstr1 = "自动";
  char* kstr2 = "短整";
  char* kstr3 = "整型";
  char* kstr4 = "长整";
  char* kstr5 = "浮点";

  char* kstr6 = "双精度";
char* kstr7 = "字符";
 char* kstr8 = "结构体";
 char* kstr9 = "公用数据类型";
 char* kstr10 = "枚举";
 char* kstr11 = "别名";
 char* kstr12 = "只读变量";
 char* kstr13 = "无符号型";
 char* kstr14 = "有符号型";
 char* kstr15 = "全局声明";
 char* kstr16 = "寄存器变量";
 char* kstr17 = "静态";
  char* kstr18 = "隐形可变";
  char* kstr19 = "无类型指针";
 char* kstr20 = "开关";
 char* kstr21 = "块";
 char* kstr22 = "跳转";
 char* kstr23 = "继续";
 char* kstr24 = "断点";
 char* kstr25 = "其他项";
 char* kstr26 = "计算长度";
  char* kstr27 = "返回";
//查找并替换函数,由社区提供源代码 我的IDE解析不过 更改了几句
int srcstrColdstonews(const char* str, const char* outstr, const char* oldstr, const char* newstr)
{
     int li = strlen(str);
    char bstr[255];
    bstr[li] = '\0';
    memset(bstr, 0, sizeof(bstr));
    int i = 0;
    for (i = 0;i < strlen(str);i++) {
        if (!strncmp(str + i, oldstr, strlen(oldstr))) {
            strcat(bstr, newstr);
            i += strlen(oldstr) - 1;
        }
        else {
            strncat(bstr, str + i, 1);
        }
    }

    strcpy(outstr, bstr);
    return 0;

}

//主输出函数根据源文件读取并修改内容
 const char* putmain(const char* read, const char* write)
 {
	
	 char buff[MAX];
	 int lines = 0;
	
	 FILE* fp ; // 创建文件指针及打开文本文件
	 

	 FILE* fp2;
	 FILE* fp4;
	
		 
	 if(read=NULL)
	 {
		 printf("源文件地址%s修改目标文件地址%s", read, "D:/SCL/1.txt\n");
	 
		 if ((fp = fopen(read, "r+")) == NULL)
		 {
			 printf("fail to readtempr txt%s", read);
			 exit(1);
		 }
		 if ((fp4= fopen("D:/SCL/1.txt", "w+")) == NULL)
		 {
			 printf("fail to wead temp wwwtxt%s", write);
			 exit(1);
		 }
		 fp2 = fopen("D:/SCL/2.txt", "w+");
		
	 }
	 else {
		 printf("源地址D:/SCL/中文编程翻译软件.txt修改目标文件地址D:/SC/3.txt\n");
		 if((fp = fopen("D:/SCL/中文编程翻译软件.txt", "r")) == NULL)
		 {
			 perror("fail to read");
			 exit(1);
		 }
		 if ((fp2 = fopen("D:/SCL/2.txt", "w+")) == NULL)
		 {
			 perror("fail to wead");
			 exit(1);
		 }
		 if ((fp4 = fopen("D:/SC/3.txt", "w+")) == NULL)
		 {
			 perror("fail to wead");
			 exit(1);
		 }
	 }
	 while (fgets(buff, MAX, fp) != NULL)
	 {

		 int li = strlen(buff);
		 buff[li] = '\0';
		 

			 char point[255], point2[255], point3[255], p4[255], p5[255], p6[255], p7[255], p8[255], p9[255], p10[255];
			 char q[255], q1[255], q2[255], q3[255], q4[255], q5[255], q6[255], q7[255], q8[255], q9[255], q10[255];
			 char l[255], l1[255], l2[255], l3[255], l4[255], l5[255];
			 srcstrColdstonews(buff, point, kstr1, "auto");
			 srcstrColdstonews(point, point2, kstr2, "short");
			 srcstrColdstonews(point2, point3, kstr3, "int");
			 srcstrColdstonews(point3, p4, kstr4, "long");
			 srcstrColdstonews(p4, p5, kstr5, "float");
			 srcstrColdstonews(p5, p6, kstr6, "double");
			 srcstrColdstonews(p6, p7, kstr7, "char");
			 srcstrColdstonews(p7, p8, kstr8, "struct");
			 srcstrColdstonews(p8, p9, kstr9, "union");
			 srcstrColdstonews(p9, p10, kstr10, "enum");
			 srcstrColdstonews(p10, q, kstr11, "typedef");
			 srcstrColdstonews(q, q1, kstr12, "const");
			 srcstrColdstonews(q1, q2, kstr13, "unsigned");
			 srcstrColdstonews(q2, q3, kstr14, "signed");
			 srcstrColdstonews(q3, q4, kstr15, "extern");
			 srcstrColdstonews(q4, q5, kstr16, "register");
			 srcstrColdstonews(q5, q6, kstr17, "static");
			 srcstrColdstonews(q6, q7, kstr18, "volatile");
			 srcstrColdstonews(q7, q8, kstr19, "void");
			 srcstrColdstonews(q8, q9, kstr20, "switch");
			 srcstrColdstonews(q9, q10, kstr21, "case");
			 srcstrColdstonews(q10, l, kstr22, "goto");
			 srcstrColdstonews(l, l1, kstr23, "continue");
			 srcstrColdstonews(l1, l2, kstr24, "break");
			 srcstrColdstonews(l2, l3, kstr25, "default");
			 srcstrColdstonews(l3, l4, kstr26, "sizeof");
			 srcstrColdstonews(l4, l5, kstr27, "return");

		
		printf("翻译好的是**: %s\n",l5);
			
			 
			
			
			 fputs(l5, fp4);
			 fputc(10, fp4);
		 

		

		 lines++;

	 }
	 printf("\n一共 %d 行", lines);
	
	 fclose(fp); // 关闭文件指针

	 fclose(fp2);
	 fclose(fp4);
	 

	 
	
 }




 main() 
 {
	 char str[100];

	// printf("Enter a value作为修改文本路径 :");
	// gets(str);

	// printf("\nYou entered: ");
	// puts(str);
	 
	 putmain("ssss","SS");
	 fclose(fp3);
	
		return 0;
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值