我有以下结构:
struct Person{
std::string name;
std::string address;
std::string& personName(){ return name; }
std::string& personAddress(){return address;}
};
练习是编写一个读取名称和地址的读取函数。比如我第一次写的函数是这样的:
std::istream &read(std::istream &is, Person &person){
is >> person.name >> person.address;
return is;
}
然而,此函数无法为 address
获取超过一个单词。例如,如果输入是:
Lee Goswell Road
输出将是 person.name
= "Lee"和 person.address
= "Goswell"。我想要的是基本上读取整个地址的功能。我确实尝试按如下方式解决此问题,但我不确定它是否正确,因为地址已隐式更改:
std::istream &read(std::istream &is, Person &person){
is >> person.name;
std::getline(std::cin, person.address);
return is;
}
在说我应该编写单独的函数之前要考虑的另一件事,任务是编写一个函数来读取名称和地址。
最佳答案
您可以将 operator>>
与 std::getline
结合使用,但您可能希望先吃掉流中的空白区域。
除了read
,您还应该创建自己的operator>>
:
std::istream& operator>>(std::istream& is, Person& person){
is >> person.name >> std::ws;
std::getline(is, person.address);
return is;
}
然后您可以按如下方式使用它:
std::istringstream foo("Lee Goswell Road\nJon Lois Lane");
Person bar;
foo >> bar;
std::cout << bar.name << std::endl << bar.address << std::endl;
关于c++ - 从 Istream 读取,如何先读一个字再读一整行,然后返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28454992/