c代码处理

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void judgemain ();                         /*判断主函数*/
int is_sub_sring(char *s1,char *s2);           /*判断s1是否包含在读入的一行s2中*/
void meihua();                           /*大括号单独占一行,加行号*/
void add_notes();                        /*添加注释*/
void print();                            /*输出代码文件中的内容(加行数)*/
int i;
FILE *fp;
char ch;
char filename[100];                      /*要打开的文件名*/
char filename0[100];                     /*修改后要存储的文件名*/
int main()
{
    while (1)
    {
    printf("选择你要进行的操作:\n");
    printf("1.检查主函数\n");
    printf("2.使”{}“独占一行\n");
    printf("3.将特定行设为注释\n");
    printf("0.退出\n");
    scanf("%d",&i);
    if (i>0&&i<=3)
    {
        printf("输入你要打开修改的代码文件名:\n");
    scanf("%s",filename);
        if (i==1)
        judgemain();
        if (i==2)
        meihua();
        if (i==3)
        add_notes();
    }
    else
        break;
    }
    return 0;
}
void judgemain()
{
    fp=fopen(filename,"r");
    if (!fp)
    {
        fprintf(stderr,"error open file!\n");       /* 输出错误信息到标准错误设备 */
        exit(-1);
    }
    int main=0;                             /*main函数的个数*/
    char s1[10000],s2[10000];                /*存储输入的主函数和读入的代码内容*/
    printf("输入要检查的主函数:\n");       /*输入要检查的主函数内容*/
    scanf("%s",s1);
    while (fscanf(fp,"%s",s2)!=EOF)
    {
        main+=is_sub_sring(s1,s2);

    }
    printf("主函数有%d个\n",main);
    if (main>1)
        printf("!!!你的代码有%d个主函数!!!\n",main);
    if (main==0)
        printf("!!!你的代码没有主函数!!!\n");
        fclose(fp);
}
int is_sub_sring(char *s1,char *s2)             /*判断s1是否在s2中并返回有几个*/
{
int len1,len2,i,t,s0,main=0,flag;
len1=strlen(s1);            /*s1的长度*/
    len2=strlen(s2);          /*读入s2的长度*/
    for (i=0;i<len2;i++)          /*进行len2次循环找出s2中有几个s1*/
    {
        if (s1[0]==s2[i])      /*如果查找到一个字符和s1的第一个字符相同继续比较后面的字符*/
        {
            for (t=i,s0=0;t<i+len1,s0<len1;t++,s0++)
            {
                if (s1[s0]==s2[t])
                    flag=1;
                    else
                {
                    flag=0;
                    break;
                }
            }
            if (flag==1)           /*如果返回值为1则s2中有s1,s1个数+1*/
            {
                i=i+len1;
                    main++;
                    flag=0;          /*flag初始化*/
            }
        }
    }
    return main;            /*返回s1的个数*/
}
void meihua()
{
    char next,last;
    last='\0';
    fp=fopen(filename,"r");
    if (!fp)
    {
        fprintf(stderr,"error open file!\n");       /* 输出错误信息到标准错误设备 */
        exit(-1);
    }
    FILE *fout;
    printf("请输入修改后另存为的文件名:");
    scanf("%s",filename0);/*输入修改后要存为的文件名*/
    fout=fopen(filename0,"w");
    while (fscanf(fp,"%c",&ch)!=EOF)/*逐个字符扫描*/
    {
    if (ch=='{'||ch=='}')/*如果遇到{}执换行操作*/
        {
            if (last!='\n')/*如果前一个字符不是换行符加换行符*/
                fprintf(fout,"\n%c",ch);
            else
            {
            fscanf(fp,"%c",&next);/*读入{}的下一个字符*/
            if (next=='\n')/*判断{}的下一个字符是否为换行符*/
        fprintf(fout,"%c%c",ch,next);/*如果{}的下一个字符为换行符向文件中直接写入ch和next字符*/
        else
            fprintf(fout,"%c\n%c",ch,next);/*如果{}的下一个字符不是换行符则加上换行符后写入*/
        }
        }
        else
            fprintf(fout,"%c",ch);
        last=ch;
    }
    fclose(fout);
    fout=fopen(filename0,"r");
print(fout);
    printf("修改后的文件已经另存为“%s”\n",filename0);
    fclose(fout);
    fclose(fp);
}
void add_notes()
{
    FILE *fout;
    fp=fopen(filename,"r");
    printf("请输入修改后另存为的文件名:");
    scanf("%s",filename0);
    fout=fopen(filename0,"w");
int m,n,hang=1;
printf("这是原程序\n");
print(fp);
    fclose(fp);
    fp=fopen(filename,"r");
printf("请输入要作为注释的开始行:\n");
scanf("%d",&m);
printf("输入从开始行开始的行数:\n");
scanf("%d",&n);
    while (fscanf(fp,"%c",&ch)!=EOF)
    {
        if (ch=='\n')      /*计算行数*/
        {
            hang++;
        }
            if (hang>=m&&ch=='\n'&&hang<=m+n-1)      /*如果行数在输入的数据之间加上//*/
            {
                fprintf(fout,"%c//",ch);
            }
            else
            fprintf(fout,"%c",ch);
    }
    fclose(fout);
    fclose(fp);
    fout=fopen(filename0,"r");
    printf("这是修改后的程序\n");
print(fout);
    fclose(fout);
}

void print(FILE *file)          /*打印代码文件中的内容并加上行号*/
{
    int hang=1;
    printf("%d|",hang);
    while (fscanf(file,"%c",&ch)!=EOF)
    {
        if (ch=='\n')
        {
            hang++;
            printf("%c%d|",ch,hang);

        }
        else
        printf("%c",ch);
    }
    printf("\n");
    hang=1;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值