【问题标题】:'Cast' an integer to a string将整数“强制转换”为字符串
【发布时间】:2011-02-21 08:16:16
【问题描述】:

我有一个选角问题。我正在编写一个代码来打开一个文件夹中的所有文件,这些文件有一个共同的名称,但有一个使它们不同的数字。让我们通过示例以更简单的方式了解这一点。一个文件的名称将是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 添加到字符串文件夹时,我的代码并不能很好地理解它。我该如何解决?

我可以做一些事情,以便我可以打开所有具有相同特征的文件,就像我试图打开的文件一样?

【问题讨论】:

    标签: c++


    【解决方案1】:

    我认为您的问题是数值 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++ 正则表达式匹配器。

    希望这会有所帮助!

    【讨论】:

    • 谢谢!这就是解决方案! :)
    【解决方案2】:

    这不是一个转换问题,因为您不能只是将整数“转换”为字符串。

    首先,您需要将 int 转换为字符串,然后将转换后的字符串和文件夹名称连接起来。你应该检查检查this 帖子。

    【讨论】:

      【解决方案3】:

      最简单的解决方案可能是 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 有很好的答案。

      【讨论】:

        【解决方案4】:

        根据我从您的问题中了解到的是,Id 未正确添加到字符串文件夹中。 您可以使用 itoa 函数将整数转换为字符串。见here

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-27
          • 2011-12-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多