Getline () met bestandsinvoer in C++

Ik probeer een eenvoudige taak van een beginner in C++ te doen. Ik heb een tekstbestand met de lijn
“John Smith 31”. Dat is het. Ik wil in deze gegevens lezen met behulp van een IFStream-variabele. Maar ik wil de naam “John Smith” in één string-variabele lezen, en vervolgens het nummer “31” in een afzonderlijke INT-variabele.

Ik heb geprobeerd de getline-functie te gebruiken, als volgt:

ifstream inFile;
string name;
int age;
inFile.open("file.txt");
getline(inFile, name); 
inFile >> age; 
cout << name << endl;
cout << age << endl;  
inFile.close();    

Het probleem hiermee is dat het de volledige regel “John Smith 31” uitvoert. Is er een manier waarop ik de Getline-functie kan vertellen om te stoppen nadat het de naam en vervolgens “opnieuw opstarten” heeft gekregen om het nummer op te halen? Zonder het invoerbestand te manipuleren, is dat?


Antwoord 1, Autoriteit 100%

getline, zoals IT-naam Staten, lees een hele lijn, of althans tot een scheidingsteken die kan worden opgegeven.

Dus het antwoord is “nee”, getlinekomt niet overeen met uw behoefte.

Maar je kunt iets doen als:

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

Antwoord 2, Autoriteit 29%

u moet doen als:

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

Hiermee geeft u de “JOHT” in NAAM
vervolgens om volgende token te krijgen,

temp = strtok(NULL, " ");

tempkrijgt “smith” erin. dan moet je string concatination gebruiken om de temp aan het einde van de naam toe te voegen. als:

strcat(name, temp);

(u kunt ook eerst een spatie toevoegen om een spatie ertussen te krijgen).


Antwoord 3, autoriteit 29%

ifstream inFile;
string name, temp;
int age;
inFile.open("file.txt");
getline(inFile, name, ' '); // use ' ' as separator, default is '\n' (newline). 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();    

Antwoord 4

je kunt getline uit een bestand gebruiken met deze code.
deze code neemt een hele regel uit het bestand. en dan kun je een while-lus gebruiken om alle regels while (ins) te doorlopen;

ifstream ins(filename);
string s;
std::getline (ins,s);

Other episodes