大写每个单词的第一个字符 - 帮助找出我的错误

时间:2015-11-13 11:51:45

标签: c++ stream capitalize

让我们假设我们有一个名为text.txt的文本文件。在这个text.txt文件中,我们找到了这3行:

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

现在我只想把每个单词的第一个字符大写,所以看起来应该是这样的:

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

我的代码是这样做的,但只有1个我无法找到的错误。 最后一个cout只给我以下内容:

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 个答案:

答案 0 :(得分:2)

每次从输入文件中读取文本行时,都会用此行覆盖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.