思路:
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;
}