【问题标题】:Creating iterative string创建迭代字符串
【发布时间】:2011-05-12 18:33:56
【问题描述】:

有没有更好/更快的方法来创建从字符串 (const char *) 和数字 (int) 创建的字符串 (std 或 (const) char *),例如

动画0,动画1,动画2 ...动画99

比这个?

注意:不必使用 std,因为 hasValueForKey 接受 const char *

std::stringstream strIter("animation0"); 

int i = 0;
while (hasValueForKey(strIter.str().c_str())) {

    // do some stuff

    ++i;
    strIter.str(std::string());
    strIter << "animation" << i;            
}

谢谢

【问题讨论】:

  • 您已经拥有了可能是最好、最安全的方法(尽管也许您可以跳过一个步骤并将 strIter 初始化为“动画”而不是空字符串)。

标签: c++ string


【解决方案1】:

您可以将 C99 APIsnprintf(char *str, size_t size, const char *format, ...); 一起使用:

int i = 0;
char str[50];
while (hasValueForKey(str)) {
    // do some stuff
    ++i;
    snprintf(str, 50, "animation%d", i);
}

【讨论】:

  • 呃,不。它是 C++,如果您需要类似 printf,请使用 Boost.Format。
  • @Cat Plus Plus:那么,C99 有什么问题?它仍在工作;)此外,Boost 是一个外部库,必须下载、编译和维护,snprintf() 符合 C99 标准,因此可用于每个编译器。另外,如果他只需要char *,为什么还要使用复杂的结构?
  • @Constantinius:同样,它是 C++,而不是 C。snprintf 可能会可用(尽管如果它是扩展名可能会有所不同),但这没有理由忽视更好的选择并开始使用它。 C 库中的 printf 系列不是类型安全的,char* 很丑陋。而且 IMVHO,避免 Boost 只是愚蠢的。
  • @Cat Plus Plus:我知道有比snprintf() 更多的“优雅”选项,但我认为为 OP 问题提供一个简单且有效的答案而不是批评他的界面更有用。嗯.. 类型安全是 printf() 函数族的问题。但是因为他知道他提供了一个简单的整数,所以在这个例子中不会发生任何不好的事情。当然,你是对的,Boost 在很多情况下都是可行的。但我认为有时像snprintf() 这样更简单的工具会更优雅。
  • 刚刚添加 char str[MAX_CHAR] = "animation0";到你的sn-p,它非常好......我想调整更多的性能,而不是使用慢速std方法(是的,它不是类型安全的没关系,因为它的用法很清楚)......
猜你喜欢
  • 2014-03-17
  • 1970-01-01
  • 2020-09-09
  • 2014-04-21
  • 2021-04-03
  • 2019-11-05
  • 2021-10-31
  • 2012-10-23
  • 2011-06-03
相关资源
最近更新 更多