Zeichenfolge ersetzen, Zeichen suchen
-
Hi Ihr !
Ich fall vom Glauben ab ! Ist das irgendwie unmöglich mit C++ Buchstaben in einem String zu ersetzen oder waaaas ? Ich google mich ja hier tot. Ich hab schon zig super komplizierte Sachen gefunden, aber das muss doch irgendwie auf einfache, nachvollziehbare Weise gehen. Ich bin eher so der Webprogrammierer, dingel also eher mit Perl und PHP rum. Da geht so etwas sooooo unendlich einfach. Also Männer und Frauen, ich suche eine ganz, ganz einfache "Formel" um in einem String, der schon gegeben ist, einen - später auch mehrere - Buchstaben zu finden um die dann zu ersetzen. Also ganz einfach Zeichenfolge (String) durchsuchen und dann Zeichen ersetzen. Gibts da nicht ne Lösung in höchstens 5 Zeilen ? Das muss es doch geben...
Wieso ist in C/C++ nur alles so kompliziert ???
Ich bastel das ganze mit MS Visual C++ und hatte da komicherweise Probleme mit text.find() und text.replace(), weil wohl der "linke Teil von .find" eine Klasse oder so sein sollte obwohl ichs so verwendet habe, wie auf ner Homepage gesehen.
-
// Zeichen anhaengen. std::string str("Hello World"); unsigned int pos = str.find("d"); if(pos != std::string::npos) str.insert(pos + 1, "!!!!!!");
Edit: It's just not my day...
Edit2: Oh man, mal wieder voll an der Problemstellung vorbeigesegelt [...] und jetzt erst gemerkt [...]. SorryCaipi
-
Nabend,
reite nicht so auf der Sprache rum, sondern beschaeftige dich mit ihr.
Einzelne Zeichen ersetzen:
std::string str("Danki"); char oldChar('i'); char newChar('e'); std::replace(str.begin(), str.end(), oldChar, newChar);
Zeichenketten ersetzen:
std::string str("Danqi"); std::string newStr("ke"); str.replace(str.find("qi"), std::string::npos, newStr);
mfg
v R
-
Danke für Eure Hilfe.
Nacheinander: zu Caipi
Da kommt leider eine Fehlermeldung, das Programm wird so nicht ausgeführt. Da kommt ein Windows-Fenster welches sagt: "read kann nicht ausgeführt werden" (so ähnlich zumindest). Irgendwie kommt da ein Speicherzugriffsproblem oder so auf. Man kann dann nur noch die Ausführung des Codes abbrechen.
zu virtuell Realisticer
Danke, aber folgende Fehlermeldungen treten auf:
D:\Test\Verschiedenes\C++\Umwandlung.cpp(232) : error C2039: 'replace' : Ist kein Element von 'std'
D:\Test\Verschiedenes\C++\Umwandlung.cpp(232) : error C2065: 'replace' : nichtdeklarierter BezeichnerWie gesagt, falls es irgendwie wichtig ist, ich benutze MS Visual C++ und binde folgende Libs ein:
#include <stdio.h> #include <iostream.h> #include <conio.h> #include <stdlib.h> #include <windows.h> #include <math.h> #include <string.h> #include <sstream>
Aber genau so schön einfach wie es virtuell Realisticer oder auch Caipi geschrieben hat, hab ich es mir erhofft. Soewas suche ich vom Prinzip.
reite nicht so auf der Sprache rum, sondern beschaeftige dich mit ihr.
Ich reite so auf ihr rum, weil ich mich mit ihr beschäftige ! Ich bin ja so sauer, weil ich bereits so unglaublich viel gesucht habe. Solch einfache Codeschniplsel findet man irgendwie im Netz kaum (zumindest nicht mit den Suchbegriffen, die ich so bei Google verwendet habe). Ich finde es einfach komisch, dass es zu PHP, Perl, ASP so unglaublich viele schöne übersichtliche Tuturials im Netz gibt, die bei allen Suchbegriffen, in denen zusätzlich z.B. PHP, Perl, ASP steht, sofort aufgelistet werden und zu C/C++ nicht. Vielleicht wäre das mal eine Idee: Eine Internetseite mit einer Übersicht, Erklärungen und Beispielen zu jedem Befehl in C/C++. Gibts ja wie gesagt für andere Sprachen auch. Und da es bei den Sprachen so einfach ist, die Lösung zu seinem Problem zu finden, regt es mich bei C++ auf, das man erst über Foren gehen muss um gute Erklärungen zu finden.
Zu Dir, Pate:
Weil Du zu blöde bist C++ (Shit auf C Bastard!) und nichtmal einen Finger krum machst Dich weiter zu bilden. Du Pflaume!
Wieso beschimpfst Du Anfänger, die die Sprache erlernen wollen ??? Da komm ich jetzt nicht ganz mit. Wenn Du wüßtest, wieviel ich schon nach der Lösung meiner kleiner Problem gegooglet habe, dann würdest Du sowas nicht schreiben ! Leuten Blödheit zu unterstellen, nur weil sie eine Frage haben, find ich wiederum ziemlich blöd. Wenn Du zu dem Problem keine Lösung hast, brauchst Du doch auch nichts schreiben. Du missbrauchst das Forum, finde ich ! Prinzipiell sind doch solche Foren für Leute wie mich gemacht. Leute, die alles wissen, brauchen nicht zu posten. Und das C/C++ komplizierter ist als Perl/PHP/ASP ist bedarf wohl keiner Diskussion. In Scriptsprachen gibts eben schon unheimlich viele vordefinierte Module und Funktionen, was das Leben praktischer macht.
-
[cpp]
std::string::size_type pos = str.find("d");
[/cpp]
-
danke, ssm, aber wozu ist das ? wo setzt man das wie warum ein ????
-
maho schrieb:
Ich reite so auf ihr rum, weil ich mich mit ihr beschäftige ! Ich bin ja so sauer, weil ich bereits so unglaublich viel gesucht habe.
...
Wenn Du wüßtest, wieviel ich schon nach der Lösung meiner kleiner Problem gegooglet habe, dann würdest Du sowas nicht schreiben !Offensichtlich...
... nicht.Hier die Lösung:
#include <string>
Und wenn dann dein Compiler wieder meckert wirst du auch merken was es mit ssms Antwort auf sich hat. Tipp: einfach mal nach namespace googlen.
maho schrieb:
Eine Internetseite mit einer Übersicht, Erklärungen und Beispielen zu jedem Befehl in C/C++.
Auch wenn's keine Befehle sind: www.cppreference.com
Weiterhin viel Glück mit deiner Einstellung.
-
maho schrieb:
danke, ssm, aber wozu ist das ? wo setzt man das wie warum ein ????
as war für Caipi
-
Leute, was ist denn hier los ??? Wieso regt Ihr Euch denn alle so auf ? Ich war doch nur ein bißchen sauer über den Mangel an einfachen, schnell zu findenden Lösungen zu meinem Problem. Wenn ich C/C++ nicht mögen würde, würde ich mich damit doch nun auch nicht beschäftigen.
Offensichtlich...
... nicht.Doch, Finix, offentsichtlich schon ! Woher soll ein Anfänger wie ich auf Begriffe wie namespace kommen ? Ich lese schon sehr viel, bin da sicher nicht faul, aber wieso zur Hölle soll ich mich eigentlich rechtfertigen, wenn ich eine neue Sprache lernen will ??? Seid doch glücklich, dass es noch einen in Eurer Gemeinde gibt.
Weiterhin viel Glück mit deiner Einstellung.
Was hat diese ganze Kritik und Klugscheißerei eigentlich mit meinem Problem zu tun ??? Ist dieser Raum wirklich dazu da, Anfänger zu vergraulen und sie zu kritisieren ??? Merkwürdig...
Hier die Lösung:
C/C++ Code:
#include <string>Wie Du oben siehst, hab ich das bereits in meinen includes ! Das .h macht Null Unterschied, so viel weiß ich auch und hab ich auch durch ausprobieren herausbekommen.
Werd mir jetzt aber gleich mal die Site angucken, die Du da gepostet hast.
Und eins noch: Lasst uns mit der Diskussion aufhören, die nichts mit meiner Problemlösung zu tun hat, ok ?!
-
maho schrieb:
Das .h macht Null Unterschied, so viel weiß ich auch und hab ich auch durch ausprobieren herausbekommen.
nicht ganz
http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&faq=iostream#Answ
-
@maho: Tut mir leid das ich mich jetzt erst wieder melde, aber ich hab gestern
Abend nicht mehr hier reinschauen koennen. Fuer std::replace musst du die
Headerdatei 'algorithm' includieren.mfg
v R
-
Wie auch immer, ist zwar gut zu wissen, werd ich mir auch merken, aber es bringt mich nicht weiter, da die Fehlermeldung
D:\Umwandlung.cpp(232) : error C2039: 'replace' : Ist kein Element von 'std'
D:\Umwandlung.cpp(232) : error C2065: 'replace' : nichtdeklarierter Bezeichner
Fehler beim Ausführen von cl.exe.durch Weglassen/Hinzufügen der .h-Endung nicht verschwindet.
-
maho schrieb:
Wie auch immer, ist zwar gut zu wissen, werd ich mir auch merken, aber es bringt mich nicht weiter, da die Fehlermeldung
D:\Umwandlung.cpp(232) : error C2039: 'replace' : Ist kein Element von 'std'
D:\Umwandlung.cpp(232) : error C2065: 'replace' : nichtdeklarierter Bezeichner
Fehler beim Ausführen von cl.exe.durch Weglassen/Hinzufügen der .h-Endung nicht verschwindet.
Das ist merkwuerdig, denn bei mir funktioniert folgendes:
#include <iostream> #include <string> #include <algorithm> using namespace std; int main() { string str("Danki"); string oldChar("ke"); char newChar('e'); replace(str.begin(), str.end(), oldChar, newChar); cout<<str<<std::endl; return 0; }
ohne Probleme.
mfg
v R
-
Danke, virtuell Realisticer, aber auch das Includen von 'algorithm' führt zu einem "Fehler in Anwendung" (wie oben schonmal erwähnt). Um es nochmal genau zu zitieren. Es wird zwar nach der Compilierung gesagt: 0 Fehler, 0 Warnungen, aber das nach dem Kompilieren erscheinende "Fehler in Anwendung"-Fenster besagt:
"Die Anweisung in '0x0040ef8c' verweist auf Speicher in '0xcccccccc'. Der Vorgang 'read" konnte nicht auf dem Speicher durchgeführt werden."
-
Liest du vielleicht irgendwo ueber Arraygrenzen hinweg oder sowas?
Koenntest du den Code mal hier: http://rafb.net/paste/ posten und dann den
Link hier reinstellen?mfg
v R
-
virtuell Realisticer schrieb:
Das ist merkwuerdig, denn bei mir funktioniert folgendes:
#include <iostream> #include <string> #include <algorithm> using namespace std; int main() { string str("Danki"); string oldChar("ke"); char newChar('e'); replace(str.begin(), str.end(), oldChar, newChar); cout<<str<<std::endl; return 0; }
ohne Probleme.
mfg
v RMeiner Meinung nach ist da ein Fehler drin.
Müssen nicht oldChar und newChar vom gleichen Datentyp sein?
-
Super, virtuell, funktioniert jetzt doch. Naja, einem Anfänger muss man eben manchmal ein ganzes Programm schreiben, damit man sieht, wo der Fehler liegt. Hatte das using namespace nicht drin. Außerdem hatte ich die Ausgabe in einer anderen Funktion drin. Ich weiß nicht was, aber eins von den beiden Sachen hat zu dem read-Feher geführt. Danke Euch allen ! jetzt werd ich nur nochmal ein bißchen damit rumspielen müssen um es wirklich zu kapieren und anwenden zu können.
-
template<caass FwdIt, class T> void replace(FwdIt first, FwdIt last, const T& vold, const T& vnew);
Das Template kann ja nicht 2 verschiedene Datentypen annehmen
-
Ja, Horst, hast recht, ich hatte es eben mit Einzelzeichen ersetzen probiert und das hat geklappt, mit Zeichenketten kommt Deine Fehlermeldung.
-
Horst2 schrieb:
template<caass FwdIt, class T> void replace(FwdIt first, FwdIt last, const T& vold, const T& vnew);
Das Template kann ja nicht 2 verschiedene Datentypen annehmen
Ja das stimmt. Das kommt von c&p. Hatte noch ein anderes Stueck Code getestet :).
mfg
v R