ERLEDIGT
NEIN
NEIN
ANTWORTEN
6
6
ZUGRIFFE
390
390
EMPFEHLEN
-
Hallo,
es gibt eine Oraclefunktion, die folgendermaßen funktioniert:
Code :1 2
translate ('1tech23', '123', '456); would return '4tech56' translate ('222tech, '2ec', '3it'); would return '333tith'
Es werden also alle Zeichen aus dem ersten String, die im zweiten String vorkommen, mit dem Zeichen ersetzt, welches im dritten String an der gleichen Stelle ist, wie das im zweiten String!
Kompliziert ausgedrückt, aber das Beispiel zeigt es ganz gut!
ich könnte natürlich für jedes Zeichen in String 1, String 2 durchsuchen, und dann den Index nehmen, und das Zeichen aus String drei nehmen, aber vielleicht gibt es ja auch so eine Funktion in c?
Mir würde ja eine Funktion wie die java-Funktion getIndexOf() (oder so ähnlich) schon weiterhelfen!
Weiß da jemand was?
-
Also das ist ja doch nicht soviel, nur ne for() {for(){if(){}}}-Verschachtelung!
-
13.09.04 15:50 #3
- Registriert seit
- Jan 2004
- Ort
- Wannweil
- Beiträge
- 302
strchr -> findet einen char in einem String und liefert einen Zeiger darauf zurück, false, falls er nicht gefunden wurde. (Daraus kannst du dir natürlich auch einen Index errechnen, ist ja aber nicht nötig.)
Die Funktion könnte dann zB so aussehen:
Code :1 2 3 4 5 6 7 8 9 10
void translate(char*str, const char*tr, const char*by){ int index = 0; while(tr[index]){ char* tmp = str; while(tmp){ tmp = strchr(tmp, tr[index]); *tmp = by[index]; } } }
Dann gibts noch irgendeine Funktion, die gibt dir direkt den Index des übergebenen chars in einem String zurück. Wie die heisst, hab ich aber vergessen, ausserdem hat sie keine Error-Return, falls der char nicht gefunden wurde (hab noch nie ausprobiert, was dann zurückgegeben wurde).Noch weiter helfen jetzt nur noch google, msdn, Tutorials, Forumssuche, Eingebungen, Glück und ein wenig Hirnanstrengung.
-
Meinst Du, meine Funktion geht auch? Die sieht soviel einfacher aus, daß ich denke, sie tut doch nicht das richtige....:
Code :1 2 3 4 5 6 7
for(i=0;i<strlen(stringtotransform);i++){ for(x=0;x<96;x++){ if(stringtotransform[i]==from[x]){ stringtotransform[i]=to[x]; } } }
In strintotransform sthet ser zu transfromierende String, in from stehen die ZEichen die umgewandelt werden sollen, und in to, die, in die sie umgewandelt werden sollen!
-
13.09.04 17:03 #5
- Registriert seit
- Jan 2004
- Ort
- Wannweil
- Beiträge
- 302
d.h: Bei jedem Schleifendurchlauf muss die Stringlänge neu bestimmt werden.Code :1
for(i=0;i<strlen(stringtotransform);i++){
Das ist geschwindigkeitsmässig nicht sonderlich überzeugend, besser wäre:
( ausserdem arbeite ich einfach lieber mit while-schleifenCode :1 2
int i = strlen(stringtotransform); while(i--){
, da for-schleifen meistens nur 1-2 zeilen weniger Platz zu Ungunsten der Codelesbarkeit einnehmen.)
...
Ist die Länge von from und to denn immer genau 96?Code :1
for(x=0;x<96;x++){
Besser wäre:
Code :1 2
int x = -1; while(from[++x]){
Und nochmal zusammengefasst:
Code :1 2 3 4 5 6 7
int i = strlen(stringtotransform); while(i--){ int x = -1; while(from[++x]) if(stringtotransform[i]==from[x]) stringtotransform[i]=to[x]; }
Aber ansonsten sollte es funktionieren, würd ich auf den ersten Blick sagen. Die Geschwindigkeit wäre vielleicht (aber nur vielleicht, denn man kann ja nie wissen, wie schnell Routinen wie strchr arbeiten) sogar schneller, als mein Vorschlag.Noch weiter helfen jetzt nur noch google, msdn, Tutorials, Forumssuche, Eingebungen, Glück und ein wenig Hirnanstrengung.
-
Hm, ja, im "Optimieren" bin ich nicht besonders gut

Danke für Deine Hilfe
-
13.09.04 20:24 #7
- Registriert seit
- Jul 2003
- Ort
- Duisburg (NRW)
- Beiträge
- 1.788
Ich würde die Regex-Library von Boost für sowas empfehlen.
Regex=Regular Expressions, Boost=www.boost.orgChor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."
Ähnliche Themen
-
Geladene SWF-Datei als MC per "scale9grid" transformieren
Von BMo im Forum Flash PlattformAntworten: 2Letzter Beitrag: 20.06.10, 00:56 -
Unterschied zwischen "char" und "unsigned char"
Von 3Cyb3r im Forum C/C++Antworten: 2Letzter Beitrag: 05.04.10, 23:31 -
per ptr übergebenes 2dim char array wird bei funktionsende "weggeworfen"
Von Biergamasda im Forum C/C++Antworten: 5Letzter Beitrag: 04.03.06, 19:07 -
wo finde ich den "Filter" -> "Rendering-Filter" -> "3D-Transformieren"
Von anfeanger83 im Forum PhotoshopAntworten: 1Letzter Beitrag: 31.12.04, 14:20 -
"Inhalt" von char in if Schleife einbauen
Von mR.MiFiStO im Forum C/C++Antworten: 6Letzter Beitrag: 06.04.02, 20:20





Zitieren
Login






