web-dev-qa-db-ja.com

C ++でのファイル入力でのgetline()の使用

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関数を停止して、数値を取得するための「再起動」を行う方法を教えてください。入力ファイルを操作せずに、それは何ですか?

6
user3128869

getline 、その名前が示すとおり、1行全体を読み取るか、少なくとも指定可能な区切り文字まで読み取ります。

したがって、答えは「いいえ」であり、getlineはニーズに一致しません。

しかし、あなたは次のようなことをすることができます:

inFile >> first_name >> last_name >> age;
name = first_name + " " + last_name;
7
Johan

あなたは次のようにすべきです:

getline(name, sizeofname, '\n');
strtok(name, " ");

nameに "joht"が表示され、次のトークンを取得します。

temp = strtok(NULL, " ");

tempには「smith」が含まれます。次に、文字列連結を使用して、名前の最後にtempを追加する必要があります。なので:

strcat(name, temp);

(間にスペースを入れるために、最初にスペースを追加することもできます)。

2
Zeeshan
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();    
1
SliceSort