博客
关于我
强烈建议你试试无所不能的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/

你可能感兴趣的文章
架构优化 - 应用,MQ Broker,业务处理分层
查看>>
3月第3周网络安全报告:被篡改.COM网站占74.3%
查看>>
Spring Security之用户名+密码登录
查看>>
java JSplitPane设置比例
查看>>
批量操作Windows域用户
查看>>
shell脚本 接受用户参数 记录一下
查看>>
健脾祛湿的中成药有哪些?
查看>>
mongodb Index(2)
查看>>
IIS下支持下载.exe文件
查看>>
桌面快捷方式打不开怎么办?用金山网盾可修复
查看>>
CXF WebService Hello World
查看>>
市场调研报告:企业级信息防泄漏大趋势
查看>>
济南企业短信平台的价格如何?
查看>>
requirejs
查看>>
远程控制工具VNC的安装使用
查看>>
安装vmware tools错误解决办法
查看>>
Centos版的安装docker-registry私有仓库
查看>>
redis故障处理 process is already running or crashed
查看>>
find命令详解
查看>>
cxf 学习总结
查看>>