2016-12-05 30 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'填写任何缺失的字符。