1

私は、ユーザーが学校の記録に「学部」を追加できるようにするプログラムに取り組んでいます。部門は次のような構造体として保存されます。

struct Department{

  string ID;
  string name;
};

レコードに新しい部門を追加するには、ユーザーは次のような形式のコマンドを入力する必要があります。

D [5 digit department ID number] [Department name] 

この[Department name]フィールドは、ユーザーがEnterキーを押すまで続く文字列です。したがって、任意の数のスペースを含めることができます(たとえば、「人類学」または「コンピュータサイエンスおよびエンジニアリング」)。

ユーザーがコマンド文字列を正しく入力すると(で取得getline)、関連情報を抽出してレコードを保存する関数に渡されます。

void AddDepartment(string command){

  Department newDept;
  string discard;     //To ignore the letter "D" at the beginning of the command 

  istringstream iss;
  iss.str(command);

  iss >> discard >> newDept.ID >> ??? //What to do about newDept.name? 

  allDepartments.push_back(newDept);

}

残念ながら、このアプローチを機能させる方法がわかりません。空白を無視してiss.strを読み終える方法が必要です(ある場合)。フラグを設定しましたnoskipwsが、テストしたときに新しいレコードの名前フィールドが空でした。

... 
iss >> discard >> newDept.ID >> noskipws >> newDept.name; 
...

終了条件/文字について何かが足りないと思います。他にどのように私が望む機能を作成することができますか...多分何かgetまたはループさえありますか?

4

1 に答える 1

3

先頭の空白をスキップして、行の残りを読みます

iss >> discard >> newDept.ID >> ws;
std::getline(iss, newDept.name);
于 2013-01-21T22:59:13.230 に答える