C ++中的字符串和int连接[重复]

Posted

技术标签:

【中文标题】C ++中的字符串和int连接[重复]【英文标题】:string and int concatenation in C++ [duplicate] 【发布时间】: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++ 不是 Java。您正在寻找的是 to_string 函数。 This answer has a C++11 solution 以及较旧的解决方案。 【参考方案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() 的更多详细信息

【讨论】:

以上是关于C ++中的字符串和int连接[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在Python中的子列表中连接列表和数字[重复]

C/C++ 中的默认 int 主要参数 [重复]

C ++中的指针和引用之间是不是存在任何开销差异[重复]

c语言如何判断一个数组中重复元素的个数,并输出这个个数的值?

如何在c ++中将int数组转换为字节数组[重复]

循环中的预递增/递减与 gcc 和 Visual C 的后递增/递减 [重复]