string in chararray umwandeln ( ich weiß, ich bin nicht der erste ..)



  • Hallo .. ich weiß, diese frage gibts im weg wie sand am meer, aber ich bin trotzdem nicht fündig geworden. Einer hats mit einer codezeile, der andere brauch 50 und ich weiss jetzt nicht was stimmt .. Die Stringlänge kann bis zur Umwandlung verschieden sein. D.h. ich sollte vorher die Stringlänge auslesen können um dann die arraygröße bestimmen zu können ..

    Ich hab das mal wie ein anfänger das so macht mit static_cast probiert aber das geht natürlich nicht. wäre ja auch viel zu unkompliziert

    gruß



  • Meinst Du sowas?

    string s;
    char* arr = new char[s.size() + 1];
    copy(s.begin(), s.end(), arr);
    arr[s.size()] = '\0';
    


  • Meinst du sowas?

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
    
            string input = "FooBla";
            const char* chararray = input.c_str();
    
            cout << chararray << endl;
    
            return 0;
    
    }
    

    Oder eher sowas?

    char *chararray = new char [input.size()+1];
    strcpy (chararray, input.c_str());
    


  • wenns unbedingt ein Einzeiler sein soll

    char* p = static_cast< char* >( memcpy( new char[ s.size() + 1 ], s.c_str(), s.size() + 1 ) );
    


  • Storm.Xapek.de schrieb:

    Meinst du sowas?

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main() {
    
            string input = "FooBla";
            const char* chararray = input.c_str();
    
            cout << chararray << endl;
    
            return 0;
    
    }
    

    Oder eher sowas?

    char *chararray = new char [input.size()+1];
    strcpy (chararray, input.c_str());
    

    Danke an alle 🙂 .. Was is der Unterschied zwischen der ersten und der zweiten Methode`?



  • Storms zweite, campers und meine Methode erzeugen ein neues veränderbares Array, welches Du selbst freigeben musst. Storms erste Methode liefert Dir ein unveränderbares (const) Abbild des Strings, welches gültig bleibt bis Du den String veränderst.



  • Also mein BCB 6 schluckt das nicht ..

    string s = edi_display->Text;
    char* arr = new char[s.size() + 1];
    copy(s.begin(), s.end(), arr);
    arr[s.size()] = '\0';
    

    edi_display ist ein Editfeld, dessen Inhalt ich per Knopfdruck einlesen und dann auf Inhalt und bestimmte Zeichen untersuchen will... Daher das Umwandeln in ein Chararray.

    Ich erhalte folgende Fehler:

    [C++ Error] Unit1.cpp(1): E2451 Undefined symbol 'string'
    [C++ Error] Unit1.cpp(1): E2379 Statement missing ;
    [C++ Error] Unit1.cpp(2): E2451 Undefined symbol 's'
    [C++ Error] Unit1.cpp(3): E2268 Call to undefined function 'copy'
    [C++ Warning] Unit1.cpp(5): W8004 'arr' is assigned a value that is never used
    

    (Zeilennummern hab ich angepasst für euch)

    Gruß

    // btw könnte das jemand mal bitte ins BCB Forum schieben, danke



  • versuch's mal mit "std::" vor den betroffenen Namen (und natürlich mußt du die entsprechenden Header auch einbinden).



  • Wenn du mit dem BCB arbeitest, kannst du direkt die Methoden der Klasse 'AnsiString' benutzen (s. BCB-Hilfe).
    Du brauchst nicht erst ein char-Array zu erstellen (ist ja schließlich C++, kein C).
    Bei AnsiString mußt du nur beachten, daß der Index bei 1 anfängt:

    AnsiString sText = edi_display->Text;
    for(int i=1; i<=sText.Length(); i++)
    {
      char c = sText[i];
    
      // nun kannst du mit den einzelnen Zeichen machen, was du willst!
    }
    


  • ach ne .. hat sich erledigt,

    aber wir wandle ich einen Ansistring in einen double um?

    AnsiStrToDouble() ?



  • Dieser Thread wurde von Moderator/in CStoll aus dem Forum C++ in das Forum VCL/CLX (Borland C++ Builder) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • StrToFloat(); gibts vom Borland, allerdings kein StrToDouble();
    eventuell reicht das ?!

    EDIT: es muss reichen

    long double StrToFloat (AnsiString S);

    laut Hilfe



  • AnsiStrings haben allerdings auch die Funktion ToDouble().


Anmelden zum Antworten