'将'整数转换为字符串

时间:2011-02-21 08:16:17

标签: c++

我有一个铸造问题。我正在编写一个代码来打开文件夹中的所有文件,并且具有一个通用名称,但是有一个使它们不同的数字。让我们通过示例更容易地看到这一点。一个文件的名称为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时,我的代码不能很好地理解它。我该如何解决?

我可以制作一些东西,以便打开所有具有相同特征的文件,就像我试图打开的文件一样吗?

4 个答案:

答案 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