如何在字符串中插入一个整数?

时间:2018-01-25 18:42:52

标签: c++

如何在字符串中插入整数i?我试过这个,但它没有用:

for (int i = 0; i < maxFrameBoss1; i++) {
    boss1Image[i] = al_load_bitmap("boss1//frame_0" + i + "_delay-0.03s.png");
}

4 个答案:

答案 0 :(得分:5)

您需要先将i转换为字符串。然后连接字符串。最后(显然)获得了al_load_bitmap的char指针:

for (int i = 0; i < maxFrameBoss1; i++) {
    std::string filename = "boss1//frame_0" + std::to_string(i) + "_delay-0.03s.png";
    boss1Image[i] = al_load_bitmap(filename.c_str());
}

答案 1 :(得分:4)

  

如何在字符串中插入“i”变量。

有一个标准库函数可以将int转换为std::string。请参阅http://en.cppreference.com/w/cpp/string/basic_string/to_string

使用

std::string filename = std::string("boss1//frame_0") + std::to_string(i) + "_delay-0.03s.png";
boss1Image[i] = al_load_bitmap(filename);

如果al_load_bitmap无法使用std::string,请使用:

std::string filename = std::string("boss1//frame_0") + std::to_string(i) + "_delay-0.03s.png";
boss1Image[i] = al_load_bitmap(filename.c_str());

答案 2 :(得分:4)

从任意输入类型构造字符串的简单方法是使用std::ostringstream,如下所示:

for (int i = 0; i < maxFrameBoss1; i++) {
    std::ostringstream bitmap_filename_builder;
    bitmap_filename_builder << "boss1//frame_0" << i << "_delay-0.03s.png";
    boss1Image[i] = al_load_bitmap(bitmap_filename_builder.str().c_str());
}

使用此功能时,请注意std::ostrinsgstream::str()函数返回的临时创建的std::string变量的生命周期。执行该语句后,c_str()函数的结果可能会成为悬空指针。 确保您正在调用的函数获取该c样式字符串参数的副本,或者只是以强顺序方式使用它,并且不将该指针存储为状态别处。

答案 3 :(得分:1)

最简单的解决方案是使用std::to_string(i),但这可能会导致额外的分配,因为std::string无法知道中间+操作的最终大小。

相反,您可能希望使用absl::StrCat或其他一些变体:

for (int i = 0; i < maxFrameBoss1; i++) {
    std::string filename = absl::StrCat("boss1//frame_0", i, "_delay-0.03s.png");
    boss1Image[i] = al_load_bitmap(filename.c_str());
}

这是一个相对较小的性能点,但解决方案很容易值得一提。