将输入文件的字符反转再写入新的文件
题目描述
对于一个文本文件text1.dat,编写一个程序,将该文件中的每一行字符颠倒顺序后输出到另一个文件text2.dat中。
输入文件
输入文件为当前目录下的text1.dat,该文件含有多行任意字符,也可能有空行。每个文本行最长不超过80个字符。在最后一行的结尾也有一个回车符。
This is a test!
Hello, world!
How are you?
输出文件
输出文件为当前目录下的text2.dat。
!tset a si sihT
!dlrow ,olleH
?uoy era woH
算法思想
- 设立输入输出char数组
- 读取文件操作
- 逐行读取文件内容
- 对缓冲区的字符串翻转
- 逐行将字符串写入输出文件
代码实现
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void writeOut(char outPath[],char readStr[],FILE *fp);
void reverStr(char *str)
{
if(str==NULL)
{
return;
}
//建立两个char*指针
//一个指向头部,一个指向尾部
char *start=NULL;
char *end=NULL;
char n;
int len=strlen(str)-1;
start=str;
end=str+len;
//调换头尾位置
while(start<end)
{
//跳过换行符
if(*end!='\n')
{
n=*start;
*start=*end;
*end=n;
start++;
end--;
}
else{
end--;
}
}
}
void readSrc(char srcPath[],char outPath[])
{
//设立两个文件指针参数
FILE *f;
int readRow=0;
f=fopen(srcPath,"r");
FILE *fp;
fp=fopen(outPath,"w+");
if(f==NULL){
return;
}
//当没有到文件结束符继续进行循环
while(!feof(f))
{
//设立缓冲区
char readStr[1024];
//逐行读取.并判断是否遇到空行
if(fgets(readStr,1024,f)!=NULL)
{//反转字符串
reverStr(readStr);
writeOut(outPath,readStr,fp);
printf("%s",readStr);
};
}
// printf("%s\n",readStr);
fclose(f);
fclose(fp);
}
void writeOut(char outPath[],char readStr[],FILE *fp)
{
if(fp==NULL)
{
return;
}
fputs(readStr,fp);
// fwrite(readStr,100,1,f);
}
int main()
{
char srcPath[100]="text1.dat";
char outPath[100]="text2.dat";
//读取输入文件
readSrc(srcPath,outPath);
// writeOut(outPath);
}