zusammengetzete Zeichenkette



  • Hallo @all!!

    Irgendwie stehe ich aufm Schlauch!
    Was issn falsch an der Zeile???

    lblTestzeitraum->Text="Sie haben das Programm" + LFile1->DaysLeft + "benutzt.";

    Danke

    😃 Murkel 😃



  • Da ich nicht raten möchte.

    Welchen Datentyp hat lblTestzeitraum ???????
    Welchen Datentyp hat lblTestzeitraum->Text ?
    Welchen Datentyp hat LFile1 ????????????????
    Welchen Datentyp hat LFile1->DaysLeft ??????

    🙄 🙄 🙄



  • Also ich möchte zwei Strings mit einer Eigenschaft koppeln, soll heißen
    String->Prorgrammparameter->String. Soll dann auf einem Label ausgegebne werden.

    Murkel



  • Ein typisches Beispiel für die Nutzlosigkeit der ungarischen Notation 😃

    @Murkel: Man kann nicht String-Konsanten einfach aneinander ketten. Das geht aber höchstwahrscheinlich mit dem String-Typ deiner GUI-Library die du hier einsetzt.

    Also erzähl bitte mal welche GUI-Lib du verwendest 🙂

    MfG SideWinder



  • ich Programmiere mit Visual Studio 2003.
    aber ich kann doch immer einen Parameter an einen String hängen.
    Zum Beispiel:

    int zahl=1;

    std::cout<<"Die Zahl ist:"<<zahl<<std::endl; oder??



  • Da gibt es einen feinen Unterschied:
    cout<<... kann verschiedene Datentypen schlucken, wie z.B. Strings, Zeichen-Literale oder Zahlen.
    string::op+ kann nur String-Variablen mit anderen Strings oder C-Strings (char*) verketten. Um dort eine Zahl einzufügen, empfehle ich die FAQ zum Thema "einmal Zahl nach String und zurück".



  • ok schlechtes Beispiel:

    Also ich habe 3 Strings
    Zwei werden selbst verfasst und der dritte ist ein Rückgabewert einer Methode.
    Die möchte ich zusammenfassen zu einem Satz. Wie macht man das????

    😃 😃 😃



  • Kommt darauf an, in welchem Format diese Strings vorliegen. Wenn es C++ Strings sind, kannst du sie einfach mit "erg=string1+string2+string3;" zusammenfassen. Wenn es um C Strings (char* bzw. char[]) geht, solltest du sie schrittweise zusammenkoppeln: "string erg=string1;erg=erg+string2+string3;"

    (bei einer Mischung klammerst du den Ausdruck so, daß immer einer der Operanden ein C++-String ist)



  • oder du machst es so:

    // für std::ostringstream brauchst du <sstream>
    std::ostringstream ostr;
    ostr << "String1 " << b->Methode() << " Foobar";
    std::string derstring = ostr.str();
    


  • und wie gebe ich das auf einem Label aus, ich bekomme immer eine Fehlermeldung, das das + nicht benuzt werden kann.
    So sieht das in C# aus

    lblTestzeitraum->Text="Sie haben das Programm" + LFile1->DaysLeft + "benutzt.";

    und wie mache ich das in c++



  • Hi...
    evilissimo hat doch schon geschrieben wie du den String am besten zusammensetzt.

    Danach musst du halt nur noch:

    blTestzeitraum->Text = ostr.str();
    

    --------------------------------------
    Edit:
    -----> LFile->DaysLeft() gibt ja eine Zahl zurück und wenn du mit dem operator, das in einem Ausdruck benutzt funktioniert das nicht weil du nur Strings zusammensetzen kannst.

    Deswegen musst du erst die Zahl in einen String umwandeln oder so machen wie evilissimo es geschrieben hat 😉



  • In C++ gibts keine Label. Wenn dann musst du schon mal zumindest erwähnen von was für einem Framework/Toolkit du da sprichst.

    wenn du z.B.
    LFile1->DaysLeft vom Typ std::string ist und lblTestzeitraum->Text auch vom typ std::string ist, kannst du das so schreiben wie du es geschrieben hast.

    lblTestzeitraum->Text="Sie haben das Programm" + LFile1->DaysLeft + "benutzt.";
    

    BR



  • so nun habe ich den Wert als String mit folgender Anweisung:

    label1->Text="Sie haben das Programm" , lFile1->DaysLeft.ToString();

    ist das so richtig??

    wenn ich dann aber die +Zeichen benutze bekomme ich eine Meldung das zwei Zeiger nicht miteinander addiert werden können.



  • Ne, der Komma-Operator ist mit Sicherheit falsch 😉

    Was für einen Datentyp hat denn label1->Text und der Rückgabewert von lFile1->DaysLeft.ToString()? (sind vermutlich keine STL-Klassen, deshalb frage ich lieber nach)



  • ja Du hast recht, es ist keine STL.
    Der Rückgabewert ist ein long.

    Das mit dem Komma operator ist mir schon aufgefallen, wenn ich aber das + nehme bekomme ich die erwähnte Fehlermeldung.

    Mfg

    Murkel



  • Eine Methode "ToString()", die einen long int zurückliefert? Wer kommt denn auf solche Ideen? ToString() sollte entweder einen nutzerdefinierten String-Typ (z.B std::string oder MFC's CString) zurückliefern oder einen char*.

    In ersterem Fall benötigst du einen globalen "string_typ operator+(const char* l,const string_typ& r);", der die Addition ausführt.
    Im zweiten Fall mußt du entweder strcat verwenden oder einen der Operanden in einen vernünftigen Stringtyp umwandeln (label1->Text=string_typ("Sie haben das Programm") + lFile1->DaysLeft.ToString() + " Tage verwendet";).


Anmelden zum Antworten