1

私は次の構造体を持っています:

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。たとえば、入力が次の場合:

リー・ゴズウェル・ロード

出力は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;
}

別の関数を作成する必要があると言う前に考慮すべきもう 1 つのことは、名前とアドレスの両方を読み取る 1 つの関数を作成することです。

4

2 に答える 2

0

単語を読み、先頭の空白をスキップしてから、区切り文字まで読み上げます。

if (is >> person.name >> std::ws
    std::getline(is, person.address)) {
    // do something with the input
}
else {
    // deal with input failure
}

std::wsデフォルトでは、先頭の空白をスキップstd::getline()して区切り文字まで読み取るだけ'\n'です。

于 2015-02-11T13:35:53.567 に答える