文件操作(輸出倒數第二行、逆序輸出)


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=='\n'){
            len++;//判斷有幾行,當然也可用getline來判斷
        }
    }
    cout<<len<<endl;
    infile.close();
    infile.open("aaa.txt");//需要重新打開文件,否則指針已到文件末尾
    string temp;
    for(i=0;i<len-1;i++){//輸出倒數第2行
        getline(infile,temp,'\n');
    }

    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);//以二進制打開文件,否則計算文件長度會有問題

//以二進制打開, 它與文本格式的差別在於,文本格式會增加一些格式上的信息,比如換行'\n'用文本輸出是兩個字節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;
}


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com