我有一个铸造问题。我正在编写一个代码来打开文件夹中的所有文件,并且具有一个通用名称,但是有一个使它们不同的数字。让我们通过示例更容易地看到这一点。一个文件的名称为Table1.txt
,另一个Table2.txt
,另一个Table3.txt
等等。
所以我写的是这样的:
int TableId;
for(TableId=1;TableId<=7;TableId++) // We suppose that we have seven different files in my folder.
// Could I make something simmilar to open all the files with these characteristics?
{
string folder("C:\\example\\"); // Folder where my different files are stored in ".txt" files.
string Id; // Casting conversion
Id = (char) TableId;
folder += "Table";
folder += Id;
folder += ".txt"; // Extension of the file
ifstream ifs(folder.c_str());
}
问题是我的代码编译得很完美,但是当它运行时,它并不是最好的方式。当我向字符串文件夹添加字符串Id时,我的代码不能很好地理解它。我该如何解决?
我可以制作一些东西,以便打开所有具有相同特征的文件,就像我试图打开的文件一样吗?
答案 0 :(得分:2)
我认为您的问题是数值0,1,2,...,9不等于'0','1','2',...,'9的字符值”。这些数字实际上具有数字值48,49,...,50,...,57。(有关详细信息,请参阅the ASCII table)。如果你想将数字作为字符进行迭代,你可以使用像这样的显式for循环:
for (char digit = '1'; digit <= '7'; ++digit) {
/* ... use digit here ... */
}
这样可以完全避免播放并正确生成所需的字符序列。
至于你的第二个问题,C ++标准库没有太多的文件系统管理方式,你不能在不诉诸第三方库的情况下列出目录中的所有文件。但是,Boost.Filesystem库具有一些用于浏览目录的强大功能。
这可能对你想要的东西有点过分,但如果你正在寻找某些模式的所有字符串,你可能还想查看Boost.Regex一组优秀的C ++正则表达式匹配器。
希望这有帮助!
答案 1 :(得分:1)
这不是一个转换问题,因为你不能只是将一个整数“转换”为字符串。
首先,您需要将int转换为字符串,而不是连接转换后的字符串和文件夹名称。您应该查看this帖子。
答案 2 :(得分:1)
最简单的解决方案可能是Boost。
首先,您的基本示例
for(int TableId=1;TableId<=7;TableId++) // We suppose that we have 7 different files in my folder
{
string folder = "C:/example/"; // Folder where my different files are stored in ".txt" files.
string file = folder + boost::format("Table%1%.txt") % TableId;
ifstream ifs(file.c_str());
}
现在,对于“我可以创建一些类似的东西来打开具有这些特征的所有文件吗?”部分,你也使用Boost。还有另一个SO question有很好的答案。
答案 3 :(得分:0)
据我所知,您的问题是Id未正确添加到字符串文件夹中。 您可以使用itoa函数将整数转换为字符串。见here。