gpt4 book ai didi

c++ - 从 Istream 读取,如何先读一个字再读一整行,然后返回?

转载 作者:太空宇宙 更新时间:2023-11-04 13:39:06 28 4
gpt4 key购买 nike

我有以下结构:

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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com