2016-12-05 45 views
0

我有一個C++代碼,可以從目錄中讀取多個txt文件。但是這些文件是指定的格式,即abc01.txt,abc02.txt,abc03.txt .....,abc99.txt。如何以指定的格式讀取C++中的多個txt文件。

我可以讀取格式爲abc1.txt,abc2.txt,abc3.txt .....,abc99.txt的文件。使用我的代碼。問題是我不能讀取整數值01至09.

請幫我我如何編輯我的代碼並閱讀所有文件。

我的代碼:

for(files=1;files<=counter;files++) 
    { stringstream out; 
     out<<files; 
     infile="./input/abc"+out.str()+".txt"; 
       input.open(infile.c_str()); 
    } 

回答

1

這可能是一個骯髒的修復,但你可以添加一個附加條件來處理文本文件abc01到abc09

for(files=1;files<=counter;files++) 
    { stringstream out; 
     out<<files; 
     if(files<10){ 
     infile="./input/abc0"+out.str()+".txt"; 
     } 
     else 
     infile="./input/abc"+out.str()+".txt"; 
       input.open(infile.c_str()); 
    } 
+0

殘酷而簡單。可以避免使用std :: to_string的字符串流。 – user4581301

0

你可以使用std::sprintf格式化字符串,例如

for (int filenum=1; filenum<=counter; filenum++) { 
    char nambuf[64]; 
    std::snprintf(nambuf, sizeof(nambuf), "./input/abc%02d.txt", filenum); 
    std::ifstream infile; 
    infile.open(nambuf); 

我建議花更多時間閱讀documentation of C++標準庫。

0

您可以使用std::setwstd::setfill IO操縱,以確保您的號碼被格式化爲至少爲兩個數字長:

for(int file = 1; file <= counter; file++) { 
    std::ostringstream filename; 
    filename << "./input/abc" << std::setw(2) << std::setfill('0') << file << ".txt"; 
    std::ifstream input(filename.str()); 
} 

這裏插入std::setw(2)確保數字的格式必須至少兩個字符長,std::setfill('0')格式化數字時用'0'填寫任何缺失的字符。