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