一个中文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;
}