我有一个关于哪些函数可用于附加字符串的问题。
在这段特定的代码中,它要求:在一行上给定字符串给定输入,在第二行上给定字符扩展名,将扩展名附加到给定输入。
例如:如果输入是:
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);
却不起作用?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()函数的规则,无论它们是否不是这些情况下的最佳使用。
您可以查看
std::string
提供了哪些成员函数,而不是通过反复试验来尝试函数:
请注意,
append
没有任何只需要一个字符的重载。
如果你真的想使用它,理论上你可以调用:
givenInput.append(1, extension);
...但这毫无意义,因为你可以写:
givenInput.push_back(extension);
// or
givenInput += extension;
在第二个示例中,您正确使用了
append
,因为它确实有一个接受 std::string
的重载 (2)。
operator+=
,因为它适用于字符和字符串:
secretID += ' ';
secretID += lastName;
在类
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;