如何以指定的格式读取C++中的多个txt文件。
问题描述:
我有一个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());
}
答
这可能是一个肮脏的修复,但你可以添加一个附加条件来处理文本文件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());
}
答
你可以使用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++标准库。
答
您可以使用std::setw
和std::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'
填写任何缺失的字符。
残酷而简单。可以避免使用std :: to_string的字符串流。 – user4581301