如何在字符串中插入整数

How to insert an integer inside a string?

本文关键字:插入 整数 字符串      更新时间:2023-10-16

如何将整数i插入字符串?我试过这个,但它不起作用:

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

先将i转换为字符串。然后连接字符串。最后(显然(为您的al_load_bitmap获取指向字符的指针:

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());
}

如何将"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());

从任意输入类型构造字符串的简单方法是使用如下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 样式字符串参数的副本,或者只是以强顺序方式使用它,并且不会将该指针作为状态存储在其他位置。

最简单的解决方案是只使用 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());
}

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