C语言编程问题?

编写一个程序读取输入,直至读到文件结尾,然后把字符串打印出来。该程序识别和实现下面的命令行参数:-p按原样打印-u把输入转换成大写-l把输入转换成小写如果没有命令行参数,... 编写一个程序读取输入,直至读到文件结尾,然后把字符串打印出来。该程序识别和实现下面的命令行参数:
-p 按原样打印
-u 把输入转换成大写
-l 把输入转换成小写
如果没有命令行参数,则让程序像是使用了-p参数那样运行
展开
 我来答
自我编程
2021-05-03 · 科技优质答主
自我编程
采纳数:1481 获赞数:4283

向TA提问 私信TA
展开全部

思路:

1、利用ftell函数获取文件的长度(字节数)。

2、利用fread函数读取文件所有内容。

3、通过遍历字符串,进行大小写判断及转换。

下面是演示代码:(命令符不想输入,连续两次回车)

#include <stdio.h>

#include <malloc.h>

#include <string.h>

#define FPH "C:\\test.txt"

long getFileSize(char path[]);//获取文件长度

char *readFFile(char path[]);//获取文件内容

int printfStrsByCommand(char *strs,char *com);//通过命令符,打印对应格式的字符串内容

//com为命令符,如下:(缺省传NULL,程序取默认值-p)

//-p 按原样打印

//-u 把输入转换成大写

//-l 把输入转换成小写


int main()

{

    int i=0;

    char *strs=NULL,com[3]={0};

    strs=readFFile(FPH);

    printf("请输入打印输出样式的命令符(-p\\-u\\-l):");

    while(i<2)com[i++]=getchar();

    printfStrsByCommand(strs,com);

    free(strs);//这个释放对本程序无意义,可删除,因为程序到此就结束了。

    strs=NULL;//但是如你后面还添加其它代码,strs不再使用需这样释放。

    return 0;

}

int printfStrsByCommand(char *strs,char *com)

{

    char c[]="-p",*p=NULL;

    if(strs)

    {

        if(!com) com=c;

        if(!strcmp(com,"-u"))

        {

            p=strs;

            while(*p)

            {

                if(*p>='a' && *p<='z')

                    *p^=32;

                p++;

            }

            printf("转换成大写打印输出:\n");

        }

        if(!strcmp(com,"-l"))

        {

            p=strs;

            while(*p)

            {

                if(*p>='A' && *p<='Z')

                    *p^=32;

                p++;

            }

            printf("转换成小写打印输出:\n");

        }

        if(strcmp(com,"-p") && strcmp(com,"-u") && strcmp(com,"-l"))

            printf("无效命令符!按-p打印输出:\n");

    }

    printf("%s\n",strs);

    return 1;

}

long getFileSize(char path[])

{

    long flen;

    FILE *fp=NULL;

    fp=fopen(path,"rb");

    if(!fp) return -1;

    fseek(fp,0L,SEEK_END);

    flen=ftell(fp);

    fclose(fp);

    return flen;

}

char *readFFile(char path[])

{

    long size=0;

    char *strs=NULL;

    FILE *fp=NULL;

    fp=fopen(path,"rb");

    if(!fp){fclose(fp);return NULL;}

    fseek(fp,0L,SEEK_SET);

    size=getFileSize(FPH);

    strs=(char *)malloc(sizeof(char)*(size+1));

    if(!strs){{fclose(fp);return NULL;}}

    if(fread(strs,1,size,fp)<size)

    {

        free(strs);

        fclose(fp);

        return NULL;

    }

    strs[size]=0;

    fclose(fp);

    return strs;

}

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式