【求助】C程序--将文件中每一行字符反序(对最佳结果追加30分)
来源:百度知道 编辑:UC知道 时间:2024/07/02 08:54:54
请朋友帮帮忙 用标准C写下 谢谢!
【问题描述】
对于一个文本文件text1.dat,编写一个程序,将该文件中的每一行字符颠倒顺序后输出到另一个文件text2.dat中。
【输入文件】
输入文件为当前目录下的text1.dat,该文件含有多行任意字符,也可能有空行。每个文本行最长不超过80个字符。
【输出文件】
输出文件为当前目录下的text2.dat。
【样例输入】
设输入文件text1.dat为:
This is a test!
Hello, world!
How are you?
【样例输出】
输出文件text2.dat为:
!tset a si sihT
!dlrow ,olleH
?uoy era woH
【评分标准】
输出文件应与输入文件的字符个数相等,并且符合题目规定的格式。如果你的程序输出正确得20分,每个测试点4分。提交程序名为c0804.c。
【问题描述】
对于一个文本文件text1.dat,编写一个程序,将该文件中的每一行字符颠倒顺序后输出到另一个文件text2.dat中。
【输入文件】
输入文件为当前目录下的text1.dat,该文件含有多行任意字符,也可能有空行。每个文本行最长不超过80个字符。
【输出文件】
输出文件为当前目录下的text2.dat。
【样例输入】
设输入文件text1.dat为:
This is a test!
Hello, world!
How are you?
【样例输出】
输出文件text2.dat为:
!tset a si sihT
!dlrow ,olleH
?uoy era woH
【评分标准】
输出文件应与输入文件的字符个数相等,并且符合题目规定的格式。如果你的程序输出正确得20分,每个测试点4分。提交程序名为c0804.c。
#include <stdio.h>
void write_line(FILE *w,char stack[], int sp)
{
while(sp>0)
{
char c=stack[--sp];
if(c>=0)//ASCII字符
{
fprintf(w,"%c",c);
}
else//双字节字符的两个字节不能颠倒
{
fprintf(w,"%c%c",stack[--sp],c);
}
}
}
int main(int argc, char* argv[])
{
FILE *r=fopen("C:\\text1.dat","r");//输入文件
FILE *w=fopen("C:\\text2.dat","w");//输出文件
int eof;//用于指示是否已经到达文件末尾
char c;//读入的字符
char stack[20000];//堆栈,用于存放一行中的字符,一行最大允许20000个字节
int sp=0;//堆栈栈顶指针
for(eof=fscanf(r,"%c",&c);eof!=EOF && eof>0; eof=fscanf(r,"%c",&c))
{
if(c!='\n' && c!='\r')//将非换行符压入堆栈
{
stack[sp++]=c;
}
else//以逆序输出当前行的字符
{
write_line(w,stack,sp);
sp=0;//将堆栈清空