博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(原創) 如何讀取文字檔? (C/C++) (STL)
阅读量:6612 次
发布时间:2019-06-24

本文共 3668 字,大约阅读时间需要 12 分钟。

讀取文字檔有很多方式,在此歸納出最精簡的程式寫法。

若要一行一行的讀取文字檔,可使用以下寫法。

 1
ExpandedBlockStart.gif
ContractedBlock.gif
/**/
/* 
 2InBlock.gif(C) OOMusou 2006 http://oomusou.cnblogs.com
 3InBlock.gif
 4InBlock.gifFilename    : ReadTextFilePerLine.cpp
 5InBlock.gifCompiler    : Visual C++ 8.0 / ISO C++
 6InBlock.gifDescription : Demo how to read text file per line
 7InBlock.gifRelease     : 10/15/2006
 8ExpandedBlockEnd.gif*/
 9
None.gif
10
None.gif#include 
<
iostream
>
11
None.gif#include 
<
fstream
>
12
None.gif#include 
<
string
>
13
None.gif
14
None.gif
using
 
namespace
 std;
15
None.gif
16
ExpandedBlockStart.gifContractedBlock.gif
int
 main() 
dot.gif
{
17InBlock.gif  ifstream inFile("books.txt");
18InBlock.gif  string line;
19InBlock.gif
20ExpandedSubBlockStart.gifContractedSubBlock.gif  while(getline(inFile,line)) dot.gif{
21InBlock.gif    cout << line << endl;
22ExpandedSubBlockEnd.gif  }
23InBlock.gif
24InBlock.gif  inFile.close();
25InBlock.gif
26InBlock.gif  return 0;
27ExpandedBlockEnd.gif}

執行結果

None.gif
this is a book
None.gifa book a book
None.gifbook
None.gif請按任意鍵繼續 . . .

若在一行一行讀取文字檔的同時,還想同時讀出每一個字串,可用以下寫法。

 1
ExpandedBlockStart.gif
ContractedBlock.gif
/**/
/* 
 2InBlock.gif(C) OOMusou 2006 http://oomusou.cnblogs.com
 3InBlock.gif
 4InBlock.gifFilename    : ReadTextFilePerLineWord.cpp
 5InBlock.gifCompiler    : Visual C++ 8.0 / ISO C++
 6InBlock.gifDescription : Demo how to read text file per line
 7InBlock.gifRelease     : 10/15/2006
 8ExpandedBlockEnd.gif*/
 9
None.gif#include 
<
iostream
>
10
None.gif#include 
<
fstream
>
11
None.gif#include 
<
string
>
12
None.gif#include 
<
sstream
>
13
None.gif
14
None.gif
using
 
namespace
 std;
15
None.gif
16
ExpandedBlockStart.gifContractedBlock.gif
int
 main() 
dot.gif
{
17InBlock.gif  ifstream inFile("books.txt");
18InBlock.gif  string line;
19InBlock.gif
20ExpandedSubBlockStart.gifContractedSubBlock.gif  while(getline(inFile,line)) dot.gif{
21InBlock.gif    cout << line << endl;
22InBlock.gif    istringstream ss(line);
23InBlock.gif    string word;
24ExpandedSubBlockStart.gifContractedSubBlock.gif    while(ss >> word) dot.gif{
25InBlock.gif      cout << word << endl;
26ExpandedSubBlockEnd.gif    }
27InBlock.gif    cout << endl;
28ExpandedSubBlockEnd.gif  }
29InBlock.gif
30InBlock.gif  inFile.close();
31InBlock.gif
32InBlock.gif  return 0;
33ExpandedBlockEnd.gif}

執行結果

None.gif
this is a book
None.gifthis
None.gifis
None.gifa
None.gifbook
None.gif
None.gifa book a book
None.gifa
None.gifbook
None.gifa
None.gifbook
None.gif
None.gifbook
None.gifbook
None.gif
None.gif請按任意鍵繼續 . . .

若只要讀取文字檔中的每個字,使用while()的方式,可直接處理字串。

 1
ExpandedBlockStart.gif
ContractedBlock.gif
/**/
/*
 
 2
InBlock.gif(C) OOMusou 2006 
http://oomusou.cnblogs.com
 3
InBlock.gif
 4
InBlock.gifFilename    : ReadTextFilePerWord.cpp
 5
InBlock.gifCompiler    : Visual C++ 8.0 / ISO C++
 6
InBlock.gifDescription : Demo how to read text file per word
 7
InBlock.gifRelease     : 12/07/2006
 8
ExpandedBlockEnd.gif
*/
 9
None.gif
10
None.gif#include 
<
iostream
>
11
None.gif#include 
<
fstream
>
12
None.gif#include 
<
string
>
13
None.gif
14
None.gif
using
 
namespace
 std;
15
None.gif
16
ExpandedBlockStart.gifContractedBlock.gif
int
 main() 
dot.gif
{
17InBlock.gif  ifstream inFile("books.txt");
18InBlock.gif  string str;
19InBlock.gif  
20InBlock.gif  while(infile >> str) 
21InBlock.gif    cout << str << endl;
22InBlock.gif  
23InBlock.gif  inFile.close();
24InBlock.gif
25InBlock.gif  return 0;
26ExpandedBlockEnd.gif}

另外一種方式,使用copy() algorithm將文字都讀到vector中,再做後續的加工處理,優點是程式超短,缺點是要多浪費一個vector。

 1
ExpandedBlockStart.gif
ContractedBlock.gif
/**/
/* 
 2InBlock.gif(C) OOMusou 2006 http://oomusou.cnblogs.com
 3InBlock.gif
 4InBlock.gifFilename    : ReadTextByCopy.cpp
 5InBlock.gifCompiler    : Visual C++ 8.0 / ISO C++
 6InBlock.gifDescription : Demo how to read file per string by copy() algorithm
 7InBlock.gifRelease     : 12/17/2006 1.0
 8ExpandedBlockEnd.gif*/
 9
None.gif#include 
<
iostream
>
10
None.gif#include 
<
fstream
>
11
None.gif#include 
<
vector
>
12
None.gif#include 
<
string
>
13
None.gif#include 
<
algorithm
>
14
None.gif
15
None.gif
using
 
namespace
 std;
16
None.gif
17
ExpandedBlockStart.gifContractedBlock.gif
int
 main() 
dot.gif
{
18InBlock.gif  ifstream inFile("books.txt");
19InBlock.gif  vector<string> svec;
20InBlock.gif  copy(istream_iterator<string>(inFile), istream_iterator<string>(), back_inserter(svec));
21InBlock.gif  copy(svec.begin(), svec.end(), ostream_iterator<string>(cout,"\n"));
22InBlock.gif
23InBlock.gif  inFile.close();
24InBlock.gif
25InBlock.gif  return 0;
26ExpandedBlockEnd.gif}

執行結果

None.gif
this
None.gifis
None.gifa
None.gifbook
None.gifa
None.gifbook
None.gifa
None.gifbook
None.gifbook
None.gif請按任意鍵繼續 . . .
(02/20/2007 更新) 有網友問我怎麼將文字檔讀到二維陣列處理,以下是處理的方式
文字檔
None.gif
00001
 Peter Hsiao 
555.55
None.gif
00002
 John  Lin   
222.12
 1
ExpandedBlockStart.gif
ContractedBlock.gif
/**/
/* 
 2InBlock.gif(C) OOMusou 2007 http://oomusou.cnblogs.com
 3InBlock.gif
 4InBlock.gifFilename    : ReadTextFilePerLineWordToArray.cpp
 5InBlock.gifCompiler    : Visual C++ 8.0 / gcc 3.4.2 / ISO C++
 6InBlock.gifDescription : Demo how to read text file to 2 dim array
 7InBlock.gifRelease     : 02/20/2007 1.0
 8ExpandedBlockEnd.gif*/
 9
None.gif#include 
<
iostream
>
10
None.gif#include 
<
fstream
>
11
None.gif#include 
<
string
>
12
None.gif#include 
<
sstream
>
13
None.gif
14
None.gif
using
 
namespace
 std;
15
None.gif
16
ExpandedBlockStart.gifContractedBlock.gif
int
 main() 
dot.gif
{
17InBlock.gif  ifstream inFile("source.txt");
18InBlock.gif  const int xsize = 5;
19InBlock.gif  const int ysize = 2;
20InBlock.gif  string (*arr)[xsize] = new string[ysize][xsize];
21InBlock.gif  
22InBlock.gif  string line;
23InBlock.gif  int y = 0;
24ExpandedSubBlockStart.gifContractedSubBlock.gif  while(getline(inFile,line)) dot.gif{
25InBlock.gif    istringstream ss(line);
26InBlock.gif    string word;
27InBlock.gif    int x = 0;
28ExpandedSubBlockStart.gifContractedSubBlock.gif    while(ss >> word) dot.gif{
29InBlock.gif      arr[y][x] = word;
30InBlock.gif      ++x;
31ExpandedSubBlockEnd.gif    }
32InBlock.gif    ++y;
33ExpandedSubBlockEnd.gif  }
34InBlock.gif
35InBlock.gif  inFile.close();
36InBlock.gif  
37ExpandedSubBlockStart.gifContractedSubBlock.gif  for(int y = 0; y != ysize; ++y) dot.gif{
38ExpandedSubBlockStart.gifContractedSubBlock.gif    for(int x = 0; x != xsize; ++x) dot.gif{
39InBlock.gif      cout << arr[y][x] << " ";
40ExpandedSubBlockEnd.gif    }
41InBlock.gif    cout << endl;
42ExpandedSubBlockEnd.gif  }
43InBlock.gif  
44InBlock.gif  delete []arr;
45InBlock.gif
46InBlock.gif  return 0;
47ExpandedBlockEnd.gif}
執行結果
None.gif
00001
 Peter Hsiao 
555.55
None.gif
00002
 John Lin 
222.12

转载地址:http://poaso.baihongyu.com/

你可能感兴趣的文章
KubeCon + CloudNativeCon论坛2019上海
查看>>
【总结整理】已读功能---摘自《馒头商学院》
查看>>
非抢占式系统优点
查看>>
TPYBoard V102:能跑Python的stm32开发板
查看>>
在阿里云域名https配置(nginx为例)
查看>>
TP5.0中的小知识总结
查看>>
【SSH网上商城项目实战27】域名空间的申请和项目的部署及发布
查看>>
RabbitMQ-从基础到实战(2)— 防止消息丢失
查看>>
5.1、Android Studio用Logcat编写和查看日志
查看>>
【译】ExtJS 4.1会带来什么
查看>>
正则表达式基础知识
查看>>
【ShaderToy】开篇
查看>>
wp7 城市天气预报查询
查看>>
重要的话
查看>>
银联参数
查看>>
QRegExp正则表达式用法
查看>>
a 标签的伪类的正确顺序,以及原因
查看>>
PHP中ts和nts版本 - vc6和vc9编译版本的区别
查看>>
iphone 地图:
查看>>
ES6学习总结之 Promise对象
查看>>