C++で簡単な初心者のタスクを実行しようとしています。 "John Smith 31"という行を含むテキストファイルがあります。それでおしまい。 ifstream変数を使用してこのデータを読み取りたいのですが。しかし、 "John Smith"という名前を1つの文字列変数に読み取り、次に "31"という数字を別のint変数に読み取りたいと思います。
次のように、getline関数を使用してみました。
ifstream inFile;
string name;
int age;
inFile.open("file.txt");
getline(inFile, name);
inFile >> age;
cout << name << endl;
cout << age << endl;
inFile.close();
この問題は、「John Smith 31」という行全体が出力されることです。名前を取得した後にgetline関数を停止して、数値を取得するための「再起動」を行う方法を教えてください。入力ファイルを操作せずに、それは何ですか?
getline
、その名前が示すとおり、1行全体を読み取るか、少なくとも指定可能な区切り文字まで読み取ります。
したがって、答えは「いいえ」であり、getline
はニーズに一致しません。
しかし、あなたは次のようなことをすることができます:
inFile >> first_name >> last_name >> age;
name = first_name + " " + last_name;
あなたは次のようにすべきです:
getline(name, sizeofname, '\n');
strtok(name, " ");
nameに "joht"が表示され、次のトークンを取得します。
temp = strtok(NULL, " ");
tempには「smith」が含まれます。次に、文字列連結を使用して、名前の最後にtempを追加する必要があります。なので:
strcat(name, temp);
(間にスペースを入れるために、最初にスペースを追加することもできます)。
ifstream inFile;
string name, temp;
int age;
inFile.open("file.txt");
getline(inFile, name, ' '); // use ' ' as separator, default is '/n'. Now name is "John".
getline(inFile, temp, ' '); // Now temp is "Smith"
name.append(1,' ');
name += temp;
inFile >> age;
cout << name << endl;
cout << age << endl;
inFile.close();