1.输出倒数第二行
#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main(){
//cin.imbue(locale("chs"));
cout.imbue(locale("chs"));//控制台输出中文
int i,len=1;
char ch=NULL;
ifstream infile("aaa.txt");
while(ch!=EOF){
ch=infile.get();
if(ch=='
'){
len++;//判断有几行,当然也可用getline来判断
}
}
cout<<len<<endl;
infile.close();
infile.open("aaa.txt");//需要重新打开文件,否则指针已到文件末尾
string temp;
for(i=0;i<len-1;i++){//输出倒数第2行
getline(infile,temp,'
');
}
cout<<temp<<endl;
system("pause");
return 0;
}
2.逆序输出
#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main(){
//cin.imbue(locale("chs"));
cout.imbue(locale("chs"));//控制台输出中文
int i=0,len=0,j=0;//j用于计数
char ch=NULL,chs[2];//chs[]数组用于保存中文
ifstream infile("aaa.txt",ios::binary);//以二进制打开文件,否则计算文件长度会有问题
//以二进制打开, 它与文本格式的差别在于,文本格式会增加一些格式上的信息,比如换行' '用文本输出是两个字节0x0Ah,0x0Dh. 而如用二进制输出则是0x0Ah
while(ch!=EOF){
ch=infile.get();
len++;
}
infile.close();
infile.open("aaa.txt",ios::binary);
for(i=1;i<=len;i++){
infile.seekg(-i,ios::end);
ch=infile.get();//如果文件里面包含中文,则输出是乱码,为啥?显而易见,如:ch[0]+ch[1]='中' ,ch[1]+ch[0]=毛线啊。。。
//下面判断是否是中文,中文的ascii码是大于127的
if(ch&0x80){
chs[j]=ch;
j++;
if(j==2){
cout<<chs[1]<<chs[0];
j=0;
}
}else{
j=0;
cout<<ch;
}
}
system("pause");
return 0;
}