C++字符串连接运算符<<

23

我意识到了我的错误。我试图连接两个字符串。

我刚开始学习C++,遇到了一个有关字符串拼接的问题。当我使用以下代码时没有问题:

cout << "Your name is"<<name;

但是,当我尝试使用字符串时:

string nametext;
nametext = "Your name is" << name;
cout << nametext;

我遇到了一个错误。如何将两个字符串连接起来?


name 是一个 std::string 吗? - Joseph Mansfield
<<cout 的“输出”运算符。它不用于 std::string 或 C 风格字符串 (char *)。 - crashmstr
将来,可能会有一些无法使用std::ostringstream解决的问题需要解决。 - chris
请查看以下链接:https://dev59.com/u2855IYBdhLWcg3wfUjQ - Nadeem Shaikh
5个回答

35
在C++中进行字符串拼接,应该使用+运算符。
nametext = "Your name is" + name;

3
无法工作,我收到了“二进制表达式的无效操作数('const char *'和'const char *')”的错误提示。错误发生在这行代码中: std::string helloWorld = "Hello," + " World!";我做错了什么?"Hello,"和" World!"都是有效的字符串(我可以分别声明、赋值和打印它们),但它会引发一些奇怪的有关char*的错误? - Gregory Fenn
4
C++试图与C保持向后兼容,因此原始字面字符串"string"将是一个const char*而不是C++字符串。在C++中,不能重载同时接受基本类型的运算符,这意味着您必须将其中一个转换为字符串。这样做可以实现:std::string helloWorld = "Hello" + std::string(" World!"); - Creris
太棒了!这让我清楚了很多 :) 我习惯于C#,所以其中一些技术点对我来说似乎相当奇怪,尝试向后兼容似乎很奇怪,但这只是我的个人看法。 - Gregory Fenn
@GregoryFenn 如果你之前不知道C++中的原始字面字符串,那么它们会非常令人困惑。 - Creris

13

首先不清楚type name是什么类型。如果它的类型是std::string,那么应该用

string nametext;
nametext = "Your name is" << name;

你应该写作

std::string nametext = "Your name is " + name;

运算符“+”用于连接字符串。

如果name是一个字符数组,那么你不能使用运算符“+”连接两个字符数组(因为字符串字面值也是一个字符数组),因为表达式中的字符数组会被编译器隐式地转换为指针。在这种情况下,你可以这样写

std::string nametext( "Your name is " );
nametext.append( name );
或者。
std::string nametext( "Your name is " );
nametext += name;

4
nametext是一个std::string类型,但是与输出流不同的是,它没有流插入运算符(<<)。
若要连接字符串,可以使用append成员函数(或其等效的+=运算符),也可以使用+运算符,该运算符会将前两个字符串连接起来并生成一个新的字符串。

4
你可以使用流字符串来组合字符串, 如下所示:
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
    string name = "Bill";
    stringstream ss;
    ss << "Your name is: " << name;
    string info = ss.str();
    cout << info << endl;
    return 0;
}

0

nametext = "你的名字是" + name;

我觉得这样应该可以。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接