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

1zmg4dgp  于 2023-06-25  发布在  其他
关注(0)|答案(2)|浏览(158)

我有一个问题,关于哪些函数用于追加字符串。
在这个特定的代码中,它要求:给定一行的字符串givenInput和第二行的字符扩展名,将扩展名附加到givenInput。
例如:如果输入为:
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);,最终工作。
在另一个提示中,它询问:为secretID指定firstName、空格和lastName。
例:如果firstName是John,lastName是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;

为什么在这种情况下append函数可以工作,而在另一个例子中它不能工作?
这仅仅是因为lastName是一个字符串,而extension是一个char吗?
另外,为什么像secretID = firstName.append();这样的东西适用于第二个例子,而像givenInput = givenInput.append(extension)这样的东西不适用于第一个例子?
我知道这是很多文本,但如果有人能请解释背后的规则,那将是非常感谢的,因为它会澄清我的困惑!!

***注意:我知道像givenInput = givenInput + extension;这样的东西以及

secretID = firstName + " " + lastName;对这两个例子都适用,但我想我只是问append()和push_back()函数的规则,不管它们是否不是最适合这些情况的。

rxztt3cl

rxztt3cl1#

与其通过反复试验来尝试函数,您可以看看std::string提供了哪些成员函数:

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

givenInput.append(1, extension);

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

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

在第二个示例中,您正确地使用了append,因为它确实有一个重载(2),可以接受std::string
如果有疑问,请使用operator+=,因为它可以处理字符和字符串:

secretID += ' ';
secretID += lastName;
h7wcgrx3

h7wcgrx32#

在类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;

相关问题