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()

的更多详细信息