String Replace



  • Hm,
    \ fehlt leuchtet ein
    jetzt bringt er mir den Fehler:
    Aufruf einer undefinierten Funktion "ReplaceString"

    Fehlt evtl. eine #include ?

    mfg



  • In welcher Programmiersprache bist du da unterwegs? C++? Dort gibt es standardmäßig keine Funktion ReplaceString die du aufrufen könntest. Ich kenne jetzt die Methoden der string-Klasse nicht auswendig, aber ich könnte mir gut vorstellen, dass es dort eine replace()-Methode gibt.

    MfG SideWinder



  • Hallo,
    bin in Borland Builder 6 (C++) unterwegs.
    Ich kriegs einfach nicht hin.

    1AnsiString s1 = DataModule........Fields[0]->AsString; //Datenbank auslesen
    2string s = s1.c_str(); //AnsiString nach string
    3Memo3->Lines->Text = s; //MemoText = s
    4
    5int SelPos = Memo3->Lines->Text.Pos(dlg->FindText); //dlg = ReplaceDialog
    6 if(SelPos > 0)
    7 {
    8 Memo3->SelStart = SelPos -1);
    9 Memo3->SelLength = dlg->FindText.Length();
    10 Memo3->SelText = dlg->ReplaceText
    11 }

    Zeile 5 Memo3->Lines->Text OK. Zeigt mir C:\\Test F:\Test SelPos ist aber 0 und springt weiter warum ???
    es müsste die Zeichenanzahl angezeigt werden

    wer kann helfen ???

    mfg



  • Hallo,
    habs jetzt soweit, dass mir Zahlen und Buchstaben nach wunsch ersetzt werden.
    ABER
    bei dem \\ ersetzen zu \ ist das nicht so.
    das \\ wird mir zur Laufzeit ja als \ angezeigt aber ich benötige in dem String nur ein \
    Aber wie
    String einzeln zerlegen, beim \ count +1 und in einem neuen String wieder zusammenlegen ???
    Hat jemand erfahrung ???
    Codeschnipsel wäre hilfreich !!
    mfg



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum VCL (C++ Builder) verschoben.

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

    Dieses Posting wurde automatisch erzeugt.



  • Du hast das etwas falsch verstanden (ist aber ein häufiger Anfängerfehler und mir auch passiert). Es ist nicht so, dass bei der Anzeige nur ein \ angezeigt wird, sondern dass im String tatsächlich nur ein \ steht. Lediglich im Quelltext musst du in String- und Zeichenliteralen ein \ als \\ schreiben.

    Folgender Grund: \ wird in C++ (im Quelltext) für Excapesequenzen benutzt. D.h. wenn ein String z.B. "\n" enthält, erhält er einen Zeichenumbruch. Im Speicher steht aber nicht "\n", sondern der Wert 10 (oder 13 oder beides). Das wird gemacht, da man Zeilenumbrüche im Quelltext nicht direkt schreiben kann, String-Literale dürfen sich nicht über mehrere Zeilen erstrecken.

    Da \ jetzt in Literalen eine besondere Bedeutung hat, kann man es nicht direkt schreiben. Deswegen muss es als \\ geschrieben werden. Der Compiler formt es zu \ um.

    Das wirkt sich auch aus, wenn man z.B. Strings aus Dateien liest. Die Dateien dürfen nicht etwa \\ enthalten, sondern \, damit es korrekt gelesen wird.



  • ansistring und string ist das selbe...
    was du dort aufrufst ist die konvertierung von (ansi)string nach c-string, was der =operator wieder zu einem (ansi)string macht...



  • X.DarkForce.X schrieb:

    ansistring und string ist das selbe...

    Nicht ganz richtig AnsiString und String sind identisch. string ist jedoch aus der STL und hat nichts mit dem String aus der VCL gemeinsam. Und soweit ich das sehe ict in den neueren Versionen des BCB String Unicode-fähig, im Gegensatz zu AnsiString.



  • Joe_M. schrieb:

    X.DarkForce.X schrieb:

    ansistring und string ist das selbe...

    Nicht ganz richtig AnsiString und String sind identisch.

    Sofern mein Wissen stimmt, ist String ein typedef auf AnsiString (bis C++ Builder 2007) oder WideString (ab C++ Builder 2009).

    @X.DarkForce.X: C++ ist Case-Sensitiv. Es gibt kein "ansistring" Typ, zumindest keinen mir bekannten (Und string ist wie gesagt ein Datentyp aus der C++ Standardbibliothek, nicht aus der VCL).



  • dann ist ansistring wohl mit #define in irgen nem header vereinbart...



  • asc schrieb:

    Sofern mein Wissen stimmt, ist String ein typedef auf AnsiString (bis C++ Builder 2007) oder WideString (ab C++ Builder 2009).

    Fast. In C++Builder >=2009 ist String ein Alias für UnicodeString. WideString ist ein C++-Wrapper für BSTR und daher nicht referenzgezählt, UnicodeString hingegen schon.



  • Hallo,
    ich denke ich habs verstanden.

    Vielen Herzlichen Dank !!

    mfg


Anmelden zum Antworten