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连接[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C语言,删除数组中的重复数字然后输出

关于C中的指针和字符串的问题[重复]

C语言,查找数组里重复出现的数字;

C语言 输入一个字符串 去掉重复的字符,输出无重复的

int在c#中浮动转换[重复]

如果 int 与 php 中的字符串连接会发生啥?