Char nach AnsiString konvertieren



  • Hallo leutz

    Ich bräuchte mal eure Hilfe

    Ich möchte Einen String vom Typ char nach AnsiString Konvertieren

    Hat Da jemand eine Idee???

    Anderrum Geht es ja leicht:

    char StrToChar(String Input)
    {
     char* CP = Input.c_str();
      char Output = (char)CP;
      return Output;
    }
    

    Jetzt brauche ich eine Funktion CharToStr()

    corvin



  • Anderrum Geht es ja leicht:

    Anderherum noch leichter (String ist ein typedef für AnsiString):

    String test=char

    Einen Blick in den Konstruktor....



  • Hallo,

    Du weißt, dass ein char ein einzelnes Zeichen ist? Was soll diese Funktion machen?
    Ansonsten nimmt der Konstruktor von AnsiString auch ein einzelnes char.

    // für char
    char ch = 'a';
    AnsiString Zeichen(ch);
    // für char*
    char* text = "Hallo";
    AnsiString atext = text;
    

    [edit]
    Dein Funktion da oben kann man auch so umschreiben.

    char StrToChar(String Input)
    {
      char Output = Input[1];
      return Output;
    }
    

    [edit]



  • Christian411 schrieb:

    Anderrum Geht es ja leicht:

    Anderherum noch leichter (String ist ein typedef für AnsiString):

    String test=char

    Nein, ich brauche einen String vom typ char

    corvin



  • Nochmal, char ist kein String, sondern ein einzelnes Zeichen. Umwandlung siehe oben.



  • Braunstein schrieb:

    // bearbeitet
    1. Du weißt, dass ein char ein einzelnes Zeichen ist?
    2. Was soll diese Funktion machen?

    1. Ja, aber man kann ja auch schreiben:

    //
    char beispiel = "test";
    cout << beispiel[3];
    // gibt ein 't' aus
    

    2. Sie soll einen einen char String in einen AnsiString umwandeln

    corvin



  • Scheinbar weißt du es nicht, denn was du unter 1. hast kann man eben nicht schreiben. Richtig müsste das so heißen.

    char* beispiel = "test";
    

    Dein Punkt 2. ist schon im oberen Post beantwortet.



  • @Braunstein

    Kann jetzt so nicht genau vestehen, was du meinst:

    http://www.marquardtnet.info/cecke/links.7/bild2.jpg



  • Braunstein schrieb:

    Scheinbar weißt du es nicht, denn was du unter 1. hast kann man eben nicht schreiben. Richtig müsste das so heißen.

    char* beispiel = "test";
    

    Dein Punkt 2. ist schon im oberen Post beantwortet.

    😮 sry 😮

    hab nich drangedacht

    corvin



  • @Christian411
    Jetzt versteh ich nicht was du meinst. Klar geht dein Code. AnsiString hat zwar keinen Zuweisungsoperator für char aber einen Konstruktor, und der wird in deinem Beispiel ja dann auch verwendet.



  • Sorry, mein freier Tag macht mich völlig fertig. Hatte corvin's Beitrag mit

    "Nein, ich brauche einen String vom typ char"

    dir zugeordent und wußte nicht, was ich falsch geschrieben hatte
    🙂



  • Problem Gelöst:

    ich poste mal schnell meinen code (gekürzt,ohne header)

    // hab' den pointer vergessen, danke Braunstein
    char* StrToChar(String Input)
    {
     char* Output = Input.c_str();
      return Output;
    }
    
    // überladene Funktion einmal mit String, einmal mit char
    void Ausgabe(String ausgabe)
    {
    Form1->ausgabe->Lines->Add(ausgabe);
    }
    void Ausgabe(char Causgabe)
    {
    String ausgabe = Causgabe;
    Form1->ausgabe->Lines->Add(ausgabe);
    }
    
    //  :warning: ist ein Test(unten)
    void __fastcall TForm1::Button5Click(TObject *Sender)
    {
    String ausgabetext = "hallo welt";
    Ausgabe(ausgabetext);
    ausgabetext = StrToChar(ausgabetext);
    Ausgabe(ausgabetext);
    }
    //---------------------------------------------------------------------------
    

    Danke für die schnelle hilfe

    corvin

    PS.: Wer hätte Lust ein Gemeinschafsprojekt ins Leben zu rufen, in dem man versch. AllroundHeader (z.B.: kovertierungen, in Dateien schreiben/lesen....)entwickelt??????



  • Ein paar Hinweise.
    1. bei der zweiten Ausgabe-Variante fehlt schon wieder ein*
    void Ausgabe(char* Causgabe)
    2. die char* Strings bei dir sollten alle const sein, da c_str() einen const char* zurückgibt und man darin auf keinem Fall etwas ändern sollte.
    also:

    void Ausgabe(const char* Causgabe)
    

    3. Wozu diese Konvertierungsfunktion StrToChar? Das macht c_str() von AnsiString doch schon (gibts bei std::string übrigens auch).



  • Entweder stehe ich heute völlig neben der Rolle, aber der Sinn will sich mir nicht erschliessen:

    Wozu für String-> char eine extra Funktion?

    ausgabetext = ausgabetext.c_str();

    tuts schneller.

    Des Weiteren ist es m.E. schlechter Stil in der Funktion char -> String nun dann eine direkte Ausgabe in ein Memo vorzunehmen. Hier müsste die Funktion einen Wert zurückgeben.

    Aber auch hier wäre

    Form1->ausgabe->Lines->Add(char);

    schneller



  • Braunstein schrieb:

    Ein paar Hinweise.
    1. bei der zweiten Ausgabe-Variante fehlt schon wieder ein*
    void Ausgabe(char* Causgabe)
    2. die char* Strings bei dir sollten alle const sein, da c_str() einen const char* zurückgibt und man darin auf keinem Fall etwas ändern sollte.
    also:

    void Ausgabe(const char* Causgabe)
    

    3. Wozu diese Konvertierungsfunktion StrToChar? Das macht c_str() von AnsiString doch schon (gibts bei std::string übrigens auch).

    1. OK, ich ändere es; es geht aber trotzdem
    2. wieso nichts ändern???
    3.
    1. siehe mein PS.
    2. sieht besser aus 😉

    corvin



  • @christian

    Muss ich noch ändern;
    hab schnellschell gemacht

    corvin


Log in to reply