1. 程式人生 > >c++對txt檔案讀取操作+例項程式碼

c++對txt檔案讀取操作+例項程式碼

因c++檔案操作一直要用,所以就特此寫一篇部落格來記錄一下c++對txt檔案的讀取操作。

1.c++檔案流:

fstream   //檔案流

ifstream  //輸入檔案流

ofstream  //輸出檔案流

2.檔案路徑的表示

檔案路徑的表示可以分為絕對路徑和相對路徑。

絕對路徑pDummyFile = fopen("D:\\vctest\\glTexture\\texture\\dummy.bmp", "rb"); 

給出了從碟符開始的全部路徑,這裡需要注意的是“\”要用雙斜線"\\"

相對路徑對相對路徑而言,路徑表示中的“\”也要用雙斜線"\\"

windows下表示相對路徑的規則為:

1、.\ 或 ./  表示當前目錄,或同級目錄;    
2、..\ 或 ../  表示父目錄,或上級目錄。

3、檔案開啟方式選項:ios::in   //供讀,檔案不存在則建立(ifstream預設的開啟方式)

ios::out   //供寫,檔案不存在則建立,檔案存在則清空原內容(ofstream預設開啟方式)

ios::ate  //檔案開啟時,指標指在檔案最後,常和in、out聯合使用

ios::app   //供寫,檔案不存在則建立,在原檔案內容後寫入新的內容,指標位置總在最後

ios::binary  //二進位制格式檔案

3、對txt檔案的顯示和複製(顯示in.txt檔案內容並將in.txt的內容複製到out.txt檔案中)
//實現txt檔案的讀入並重寫入另外一個txt檔案中~
#include<fstream>  //ifstream
#include<iostream>
#include<string>     //包含getline()
//#include<cmath>
using namespace std;

int main(){
    string s;
    ofstream outf;
    ifstream inf;
    inf.open("d://in.txt");          //特別注意,這裡是://  是雙斜槓喔~~ 
    //開啟輸出檔案
    outf.open("d://out.txt");     
    while (getline(inf, s))      //getline(inf,s)是逐行讀取inf中的檔案資訊
    {
        outf << s << '\n';
        cout << s << endl;
    }
    inf.close();
    outf.close();
    return 0;
}

4、基本的從txt檔案中讀入資料和顯示資料

//為能夠正確讀出寫入檔案的各資料,各資料間最好要有分隔
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
    fstream f("d:\\out.txt",ios::out);
    f<<1234<<' '<<3.14<<'A'<<"How are you";      //寫入資料  
    f.close();
    f.open("d:\\out.txt",ios::in);
    int i;
    double d;
    char c;
    char s[20];
    f>>i>>d>>c;         //讀取資料
    f.getline(s,20);
    cout<<i<<endl;       //顯示各資料
    cout<<d<<endl;
    cout<<c<<endl;
    cout<<s<<endl;
    f.close();
    return 0;
}
// 在檔案後面續寫資料
#include <iostream>
#include<fstream>
using namespace std;
int main () {
    ofstream examplefile   ("example.txt",ios::app);
    if(examplefile.is_open()) {
        examplefile<<"This is a line.\n";
        examplefile<<"This is another line.\n";
        examplefile.close();
    }
    return 0;
}
5、istringstream用法

istringstream物件可以繫結一行字串,然後以空格為分隔符把該行分隔開來。

#include<iostream>
#include<sstream>
using namespace std;
int main()
{
	string str, line;
	while(getline(cin, line))
	{
		istringstream stream(line);
		while(stream>>str)
			cout<<str.c_str()<<endl;
	}	
	return 0;
}
測試:
input:
abc   df   e              efgeg      ffg


ouput:
abc
df
e
efgeg
ffg


getline函式詳情見連結點選開啟連結6、用vctor儲存讀取的資料可以看看這個網址,百度一下也行https://wenwen.sogou.com/z/q809722253.htm

7、汽車加油問題的檔案操作

一輛汽車加滿油後可以行駛n千米。旅途中有k個加油站。若要使沿途的加油次數最少,設計一個有效的演算法,指出應在那些加油站停靠加油。

資料輸入:由檔案input.txt 給出輸入資料。第一行有2個正整數n和k,表示汽車加滿油後可行駛nkm,且旅途中有k個加油站。接下來1行中,有k+1個整數,表示第k個加油站與第k-1個加油站之間的距離。第0個加油站表示出發地,汽車已加滿油。第k+1個加油站表示目的地。

結果輸出:將程式設計計算出的最少加油次數輸出到檔案ouput.txt。如果無法到達目的地,則輸出“No Solution”。

輸入檔案示例              輸出檔案示例

Input.txt                   output.txt

7   7                          4

1 2 3 4 5 1 6 6 

#include<iostream>
#include<fstream>
using namespace std;

int main()
{
   ifstream fin("input.txt",ios::in);
    ofstream fout("output.txt");
    int a[100];  //距離
    int n,k;
    fin>>n>>k;
    for(int i=0;i<k+1;i++)
        fin>>a[i];
    int sum=0;   //加油次數
    int k1=0;      //加油後的里程數
    for(int i=0;i<k+1;i++)
        if(a[i]>n)
        {
            fout<<"No Solution";
            return -1;
        }
    for(int i=0;i<k+1;i++)
    {
        k1+=a[i];
        if(k1>n)
        {
            sum++;
            k1=a[i];
        }
    }
    fout<<sum<<endl<<"停靠的加油站:";
    k1=0;
    for(int i=0;i<k+1;i++)
    {
        k1+=a[i];
        if(k1>n)
        {
            k1=a[i];
            fout<<i<<' ';
        }
    }
    fout<<endl;
    fout.close();
    fin.close();
    return 0;
}

希望分享的對你們有用處,加油!