vecotr in char array umwandeln



  • hey,
    ich habe folgenden code:

    vector<char> cvec;
    	ifstream in("xx.txt");
    	while(!in.eof())
        {
            char ch;
            in >> ch;
    		cvec.push_back(ch);
        };
    	MessageBox(0, cvec, cvec, 0);
    

    ich will den vector dann mit messagebox ausgeben. Jedoch kann man ja da nicht einfach den Vector angeben. Wie löst ihr so etwas?
    danke



  • vector dont work schrieb:

    hey,
    ich habe folgenden code:

    vector<char> cvec;
    	ifstream in("xx.txt");
    	while(!in.eof())
        {
            char ch;
            in >> ch;
    		cvec.push_back(ch);
        };
    	MessageBox(0, cvec, cvec, 0);
    

    ich will den vector dann mit messagebox ausgeben. Jedoch kann man ja da nicht einfach den Vector angeben. Wie löst ihr so etwas?
    danke

    Ist das Absicht, dass Du einen vector<char> nimmst ...und keinen string (den könntest Du auch "im Stück" einlesen) ?
    Was für Daten hast Du da denn drin ? Wenn da "Undruckbares" drin ist, dann würde ich das per ostringstream konvertieren und dann mittels ostringstream::str().c_str() weiterreichen.

    Gruß,

    Simon2.



  • Du hast da ja auch ein einzelnes Zeichen, dass du übergeben willst! Ein 'x' an die MessageBox zu übergeben, wird wohl genausowenig klappen...



  • string string1;
    	char ch;
    	ifstream in("xx.txt");
    	while(!in.eof())
        {
            in >> ch;
    		string1 += ch;
        }
    	MessageBox(0, string1.c_str(), string1.c_str(), 0);
    

    danke mit strings geht es ganz gut! nur leider gibt er so immer das letzte zeichen doppelt aus. z.b. wenn ich in die textdatei lol schreib gibt er loll aus oder 123 gibt er 1233 aus woran liegt das?



  • stringftwyea schrieb:

    ...nur leider gibt er so immer das letzte zeichen doppelt aus....

    Das ist kein Problem der Ausgabe, sondern Deines Einlesens. Bedenke: Wann überprüfst Du das eof - und wann wird es festgestellt ?

    Übrigens: Du brauchst (solltest) nicht zeichenweise einzulesen, sondern kannst auch direkt einen String einlesen.
    z.B. die ganze Zeile per getline(istream&, string&) - nicht verwechseln mit "getline(char*, ...)"
    oder Einzelstrings direkt per operator>>()

    cin >> string1; // liest bis zum nächsten "whitespace"
    getline(in, string1); // liest bis zum nächsten Zeilenumbruch (oder einem vorgebbaren "Begrenzerzeichen"
    

    Gruß,
    Simon2.



  • stringftwyea schrieb:

    string string1;
    	char ch;
    	ifstream in("xx.txt");
    	while(!in.eof())
        {
            in >> ch;
    		string1 += ch;
        }
    	MessageBox(0, string1.c_str(), string1.c_str(), 0);
    

    danke mit strings geht es ganz gut! nur leider gibt er so immer das letzte zeichen doppelt aus. z.b. wenn ich in die textdatei lol schreib gibt er loll aus oder 123 gibt er 1233 aus woran liegt das?

    Das eof bit wird erst gesetzt, wenn ein Fehler passiert ist. Sprich, wenn du "Fertig" bist, ist alles OK, also geht er nochmal rauf in der Schleife. in.efo() ist OK, geht in in>>ch und da wird eof gesetzt, was aber erst im nächsten Schritt gemerkt wird.


Anmelden zum Antworten