C语言编程问题?
-p 按原样打印
-u 把输入转换成大写
-l 把输入转换成小写
如果没有命令行参数,则让程序像是使用了-p参数那样运行 展开
思路:
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;
}