练习12:使用 getline 输出姓名问候语¶
任务描述¶
编写函数 printGreeting,从输入流中读取一整行姓名,并输出对应的问候语。
姓名可能包含空格,例如 Ada Lovelace。函数必须完整读取姓名,输出格式为 Hello, 姓名!。
相关知识¶
>> 与 getline 的区别¶
使用 >> 读取字符串时,遇到空白符会停止:
使用 std::getline 可以读取整行内容,包括其中的空格:
流参数与测试¶
函数使用 std::istream& 和 std::ostream& 参数,可在测试时传入字符串流:
编程要求¶
- 使用 C++11 标准编写程序。
- 完成函数
printGreeting的函数体。 - 函数必须采用以下声明形式:
- 必须使用
std::getline(in, name)读取姓名。 - 不得使用
in >> name读取姓名。 - 输出格式必须严格为
Hello, 姓名!,并以换行结束。 - 在
test函数中使用assert验证输出内容。
待完成代码¶
#include <cassert>
#include <iostream>
#include <sstream>
#include <string>
// TODO:使用 getline 读取完整姓名,并输出问候语
void printGreeting(std::istream& in, std::ostream& out) {
// TODO
}
void test() {
std::istringstream input1("Ada Lovelace\n");
std::ostringstream output1;
printGreeting(input1, output1);
assert(output1.str() == "Hello, Ada Lovelace!\n");
std::istringstream input2("Zhang San\n");
std::ostringstream output2;
printGreeting(input2, output2);
assert(output2.str() == "Hello, Zhang San!\n");
}
int main() {
test();
std::cout << "本关测试通过" << std::endl;
return 0;
}
测试说明¶
| 测试项 | 输入内容 | 预期输出 |
|---|---|---|
| 英文全名 | Ada Lovelace |
Hello, Ada Lovelace! |
| 含空格的拼音姓名 | Zhang San |
Hello, Zhang San! |
若使用 in >> name,第一组测试将只输出 Hello, Ada!,无法通过断言。
开始你的任务吧,祝你成功!