文件操作(输出倒数第二行、逆序输出)

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;
}

原文地址:https://www.cnblogs.com/duyy/p/3714168.html