Wie kann ich eine Zeichenkette in einem String suchen und ersetzen?
Hallo zusammen,
ich möchte ein C-Programm schreiben, in der ein String durch scanf eingelesen wird.
In dem String ist eine Buchstabenkombination "ax", die durch "53" ersetzt werden soll. Die Kombination "ax" soll ersetzt werden, nicht aber "a" oder "x" oder "xa".
Ich habe da schon einmal etwas versucht. Jedoch lassen sich die Buchstaben ersetzen, aber willkürlich.
Ich bitte um Hilfe.
Hinweis: Ich darf keine C-Funktionen aus der Bibliothek string.h verwenden:
MfG
Julian Lindemeyer
char Einlesen[16];
char nachaxdurchsuchen[2] = "ax";
char durch53ersetzen[2] = "53";
int matrikelnummer = 742152;
char suchenundersetzen1;
char suchenundersetzen3;
char suchenundersetzen2;
char suchenundersetzen4;
int k, l;
printf("Bitte geben sie das Suchzeichen ein\n");
scanf("%s", nachaxdurchsuchen);
printf("Bitte geben sie das Ersatzzeichen ein\n");
scanf("%s", durch53ersetzen);
printf("Bitte geben sie den String ein, indem gesucht werden soll\n");
scanf("%s", Einlesen);
printf("%s\n", Einlesen);
suchenundersetzen1 = nachaxdurchsuchen[0];
suchenundersetzen2 = durch53ersetzen[0];
suchenundersetzen3 = nachaxdurchsuchen[1];
suchenundersetzen4 = durch53ersetzen[1];
int AnzahlderZeichenketteimString = 0;
while (Einlesen[AnzahlderZeichenketteimString] != '\0') {
AnzahlderZeichenketteimString++;
}
int j, i;
for (i = 0; i < AnzahlderZeichenketteimString; i++) {
if (Einlesen[i] == suchenundersetzen1) {
Einlesen[i] = suchenundersetzen2;
}
for (j = 0; j < AnzahlderZeichenketteimString; j++) {
if (Einlesen[j] == suchenundersetzen3) {
Einlesen[j] = suchenundersetzen4;
}
}
printf("%c%c", Einlesen[i], Einlesen[j]);
}
1 Antwort
Du darfst nur dann ersetzen, wenn du beide Suchbuchstaben gefunden hast.
D.h. du suchst in der Schleife nach dem ersten Suchbuchstaben und wenn die nächste Stelle dem zweiten Suchbuchstaben entspricht, nimmst du die Ersetzung beider Buchstaben mit den beiden Ersatzbuchstaben vor.
Und: nenne deine Variablen nicht suchenundersetzen1, suchenundersetzen2, suchenundersetzen3, suchenundersetzen4. Dann kannst du sie auch z1, z2, z3, z4 nennen. Das ist genauso nichtssagend, aber wenigstens kurz. Vielleicht such1 such2 und ersatz1 ersatz2
Und: Codebeispiele entweder als Quelltext (Symbol </> hier im Editor) formatieren oder z.B. bei pastebin.com einstellen ud den Link hier posten.
So isses. Du lässt einen Index i von der ersten bis zur zweitletzten Stelle laufen. Im Schleifenrumpf steht:
if (ein[i] == such1 && ein[i+1] == such2) {
ein[i] = ersatz1;
ein[i+1] = ersatz2;
}
Vielen Dank für deine Hilfe es scheint jetzt zu klappen, jedoch bekomme ich am Ende immer noch eine "53" an den String angehängt.
Weist du vielleicht woran das liegen könnte?
Weiß ich nicht, ich kenne ja deinen Code nicht. Wenn die Bedingung und Ersetzung in der Schleife stehen, kann das eigentlich nicht vorkommen.
Also brauche ich nur eine for Schleife?