C++ 中的字符串和整数连接
string and int concatenation in C++
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 它会按预期打印。
我更喜欢以下方式:
string words[5];
for (int i = 0; i < 5; ++i)
{
stringstream ss;
ss << "word" << i+1;
words[i] = ss.str();
}
C++ 不是 Java。
在C++中,"word" + i
是指针运算,不是字符串连接。注意string literal"word"
的类型是const char[5]
(包括空字符'[=14=]'
),然后这里衰减到const char*
。所以对于 "word" + 0
你会得到一个 const char*
类型的指针指向第一个字符(即 w
),对于 "word" + 1
你会得到指向第二个字符的指针(即 o
),依此类推。
你可以在这里使用 operator+
with std::string
, and std::to_string
(C++11 起)。
words[i] = "word" + std::to_string(i);
顺便说一句:如果你想要 word1
~ word5
,你应该使用 std::to_string(i + 1)
而不是 std::to_string(i)
.
words[i] = "word" + to_string(i+1);
请查看此 link 了解有关 to_string()
的更多详细信息
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 它会按预期打印。
我更喜欢以下方式:
string words[5];
for (int i = 0; i < 5; ++i)
{
stringstream ss;
ss << "word" << i+1;
words[i] = ss.str();
}
C++ 不是 Java。
在C++中,"word" + i
是指针运算,不是字符串连接。注意string literal"word"
的类型是const char[5]
(包括空字符'[=14=]'
),然后这里衰减到const char*
。所以对于 "word" + 0
你会得到一个 const char*
类型的指针指向第一个字符(即 w
),对于 "word" + 1
你会得到指向第二个字符的指针(即 o
),依此类推。
你可以在这里使用 operator+
with std::string
, and std::to_string
(C++11 起)。
words[i] = "word" + std::to_string(i);
顺便说一句:如果你想要 word1
~ word5
,你应该使用 std::to_string(i + 1)
而不是 std::to_string(i)
.
words[i] = "word" + to_string(i+1);
请查看此 link 了解有关 to_string()