关于字符串和字符的 .append() 与 .push_back() 的 C++ 问题(初学者问题)

问题描述 投票:0回答:2

我有一个关于哪些函数可用于附加字符串的问题。
在这段特定的代码中,它要求:在一行上给定字符串给定输入,在第二行上给定字符扩展名,将扩展名附加到给定输入。
例如:如果输入是:

Hello !

那么输出是:
Hello!

我目前拥有的代码

int main() {
    string givenInput;
    char extension;

    getline(cin, givenInput);
    cin >> extension;
    
    // this is the line of code I am allowed to edit and have come up with:
    givenInput.push_back(extension);
    
    cout << givenInput << endl; 

为什么

givenInput.push_back(extension);
有效,但
givenInput.append(extension);
却不起作用?
我以为append()适用于字符串、字符、整数等类型...,但是当我使用append函数时,它给出了错误...
我实际上最初有
givenInput = givenInput.append(extension);
,但是出现了一个错误,这导致我只做了
givenInput.append(extension);
(这也有一个错误),最后让我尝试
givenInput.push_back(extension);
,最终成功了。

在另一个提示中,它会询问:使用名字、空格和姓氏分配秘密ID。
例如:如果名字是 John,姓氏是 Doe,则输出为:John Doe

我有:

int main() {
   string secretID;
   string firstName;
   string lastName;

   cin >> firstName;
   cin >> lastName;
   
   // this is the line of code I can edit
   secretID = firstName.append(" " + lastName);

   cout << secretID << endl;

为什么在这种情况下追加功能可以工作,但对于其他示例却不起作用?
难道仅仅是因为lastName是一个字符串,而extension是一个字符吗?
另外,为什么像

secretID = firstName.append();
这样的东西适用于第二个示例,而像
givenInput = givenInput.append(extension)
这样的东西不适用于第一个示例?

我知道这是很多文字,但如果有人能解释一下这背后的规则,我将不胜感激,因为它会消除我的困惑!!

***注意:我确实明白像

givenInput = givenInput + extension;
以及
这样的东西
secretID = firstName + " " + lastName;
适用于这两个示例,但我想我只是简单地询问适用于append()和push_back()函数的规则,无论它们是否不是这些情况下的最佳使用。

c++ string append character push-back
2个回答
4
投票

您可以查看

std::string
提供了哪些成员函数,而不是通过反复试验来尝试函数:

请注意,

append
没有任何只需要一个字符的重载。 如果你真的想使用它,理论上你可以调用:

givenInput.append(1, extension);

...但这毫无意义,因为你可以写:

givenInput.push_back(extension);
// or
givenInput += extension;

在第二个示例中,您正确使用了

append
,因为它确实有一个接受
std::string
的重载 (2)。

如有疑问,请使用

operator+=
,因为它适用于字符和字符串:

secretID += ' ';
secretID += lastName;

0
投票

在类

std::string
(或类模板
std::basic_string
)中,不存在仅具有一个
append
(或
char
)类型参数的重载成员函数
charT
。对于字符,有以下重载成员函数
append

basic_string& append(size_type n, charT c);

所以你可以这样写

givenInput.append(1, extension);

重载成员函数集

append
类似于类
std::string
的构造函数:一般来说,成员函数
append
具有与构造函数类似的参数列表。例如,考虑以下构造函数

basic_string(size_type n, charT c, const Allocator& a = Allocator());

如您所见,上面的函数append与构造函数的前两个参数具有相同的参数。

注意这个而不是这个声明

givenInput.push_back(extension);

你可以直接写

givenInput += extension;
© www.soinside.com 2019 - 2024. All rights reserved.