我有一个非常简单的情况,我不知道如何解决:
我正在解析一个包含地址(城市,街道和街道号码)的文件,并拥有以下类:
class Address
{
std::string city;
std::string street;
std::string number;
};
我想为我在文件中找到的每个地址创建一个对象,但我不知道有多少文件可以更改。有没有办法创建一个对象数组;或任何更合适的解决方案?
注意:解析器工作正常,所要做的就是设置对象中的值。
答案 0 :(得分:4)
您可以将std :: vector用于此目的:http://en.cppreference.com/w/cpp/container/vector
#include <vector>
struct Address
{
std::string city;
std::string street;
std::string number;
};
bool parseAddress(Address& address)
{
//TODO: implement
//TODO: return "true" if another address has been successfully parsed
}
int main()
{
std::vector<Address> addresses;
Address current;
while(parseAddress(current))
{
addresses.push_back(current);
}
return 0;
}
答案 1 :(得分:1)
与@Serge类似,而不是使用解析器直接定义输入操作符。
struct Address
{
std::string city;
std::string street;
std::string number;
friend std::istream& operator>>(std::istream& in, Address& address) {
return parseAddress(in, address);
}
};
std::istream& parseAddress(std::istream& in, Address& address)
{
//TODO: implement
//TODO: return stream.
// If the parse failed.
// Then set the bad bit on the stream.
}
int main()
{
std::ifstream file("address.txt");
std::vector<Address> addresses(std::istream_iterator<Address>(file),
std::istream_iterator<Address>());
}