【问题标题】:string and int concatenation in C++ [duplicate]C ++中的字符串和int连接[重复]
【发布时间】:2017-01-05 00:18:08
【问题描述】:
string words[5];
for (int i = 0; i < 5; ++i) {
    words[i] = "word" + i;
}

for (int i = 0; i < 5; ++i) {
    cout<<words[i]<<endl;
}

我预期的结果是:

word1
.
.
word5

但它在控制台中是这样打印的:

word
ord
rd
d

谁能告诉我这是什么原因。我确信在 java 中它会按预期打印。

【问题讨论】:

标签: c++ string int concatenation stdstring


【解决方案1】:

我更喜欢以下方式:

  string words[5];
  for (int i = 0; i < 5; ++i) 
  {
      stringstream ss;
      ss << "word" << i+1;
      words[i] = ss.str();
  }

【讨论】:

  • 为什么?为了效率或清晰度或其他什么?
  • 我想是为了提高效率。但在这个例子中,当每一行只有一个+ 时,我认为它并不那么重要。
【解决方案2】:

C++ 不是 Java。

在 C++ 中,"word" + i 是指针运算,而不是字符串连接。注意string literal"word"的类型是const char[5](包括空字符'\0'),然后这里衰减为const char*。因此,对于"word" + 0,您将获得指向第一个字符的const char* 类型的指针(即w),对于"word" + 1,您将获得指向第二个字符的指针(即o),并且以此类推。

您可以在此处使用operator+std::stringstd::to_string(C++11 起)。

words[i] = "word" + std::to_string(i);

顺便说一句:如果你想要word1 ~ word5,你应该使用std::to_string(i + 1)而不是std::to_string(i)

【讨论】:

  • to_string(i + 1) 而不仅仅是i
  • @YuanWen 谢谢提醒。
  • 使用 Arduino 时可以使用简单转换为 String:words[i] = "word" + (String)i;
【解决方案3】:
 words[i] = "word" + to_string(i+1);

请查看此link 以了解有关to_string() 的更多详细信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-14
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    • 1970-01-01
    相关资源
    最近更新 更多