Используйте заглавные буквы в каждом слове — помогите найти мою ошибку

Предположим, у нас есть текстовый файл с именем text.txt. В этом файле text.txt мы находим эти 3 строки:

test meow, hello one, two,
ten eleven
obelix, new

Теперь я просто пытаюсь использовать первый символ каждого слова с заглавной буквы, поэтому оно должно выглядеть так:

Test Meow, Hello One, Two,
Ten Eleven
Obelix, New

Мой код делает это, но только с 1 ошибкой, которую я не могу найти.
Последний кут дает мне только следующее содержание:

Obelix, New

Так что все до этого отсутствует. Не могли бы вы, ребята, попытаться объяснить мне, где я допустил ошибку? Надеюсь, немецкие комментарии не смущают вас.

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main(){

struct fileInformation
{
string sDatei;
string sPfad;
string sText;
int iStringMAX;
char cZeichen;

}fileinformation;

ifstream inFile;

cout << "Dateiname: ";
cin >> fileinformation.sDatei;
cout << "Pfad: ";
cin >> fileinformation.sPfad;

fileinformation.sPfad.append("\\");
fileinformation.sPfad.append(fileinformation.sDatei);

inFile.open(fileinformation.sPfad);

if (inFile.is_open())
{
while (getline(inFile, fileinformation.sText))
{
cout << fileinformation.sText <<endl;
}
//Anzahl der Zeichen
fileinformation.iStringMAX = fileinformation.sText.size();
}
else
{
cerr << "Problem vorhanden" << endl;
exit(1);
}

for (int i = 0; i < fileinformation.iStringMAX; i++)
{
if (i == 0)
{
//Erstes Zeichen vom String in Character Variable speichern (Vorher auf Großbuchstabe)
//Tausche Kleinbuchstaben gegen unser Großbuchstaben aus
fileinformation.cZeichen = toupper(fileinformation.sText[i]);
fileinformation.sText[i] = fileinformation.cZeichen;
}
else if (isspace(fileinformation.sText[i]))
{
fileinformation.cZeichen = toupper(fileinformation.sText[i + 1]);
fileinformation.sText[i + 1] = fileinformation.cZeichen;
}

}cout << fileinformation.sText;

return 0;
}

1

Решение

Каждый раз, когда вы читаете строку текста из входного файла, вы перезаписываете fileinformation.sText этой строкой. После этого вы делаете свою заглавную букву в этой последней строке, и эта последняя строка печатается. Вам нужно хранить каждую строку, которую вы читаете из файла.

istream& getline (istream& is, string& str, char delim);
Note that any content in str before the call is replaced by the newly extracted sequence.
2

Другие решения

Других решений пока нет …