我有一个问题,关于哪些函数用于追加字符串。
在这个特定的代码中,它要求:给定一行的字符串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()函数的规则,不管它们是否不是最适合这些情况的。
2条答案
按热度按时间rxztt3cl1#
与其通过反复试验来尝试函数,您可以看看
std::string
提供了哪些成员函数:std::string::append
std::string::push_back
请注意,
append
没有任何只需要一个字符的重载。如果你真的想使用它,理论上你可以调用:但这是毫无意义的,因为你可以写:
在第二个示例中,您正确地使用了
append
,因为它确实有一个重载(2),可以接受std::string
。如果有疑问,请使用
operator+=
,因为它可以处理字符和字符串:h7wcgrx32#
在类
std::string
(或类模板std::basic_string
)中,没有重载的成员函数append
只有一个类型char
(或charT
)的参数。对于字符,有以下重载成员函数append
你可以写例如
重载的成员函数集
append
与类std::string
的构造函数相似:通常,成员函数append
具有与构造函数类似的参数列表。例如,考虑以下构造器正如你所看到的,上面的函数append与构造函数的前两个参数具有相同的参数。
注意那个而不是这句话
你可以写