Ersetzen von Zeichenketten
-
- Beiträge: 9
- Registriert: Sa Feb 07, 2015 11:42 am
Ersetzen von Zeichenketten
A2)
Schreiben Sie ein Programm mit folgender Leistung
:
Eine Zeichenkette von maximal 20 Zeichen wird einge
lesen, wobei man annehmen darf, dass die
eingegebene Zeichenkette keine Leerzeichen enthält.
Wenn in der eingelesenen Zeichenkette die Doppelvok
ale "au", "Au", "aU" oder "AU" auftreten, werden si
e
durch die Kombinationen "ei", "Ei", "eI" bzw. "EI"
ersetzt.
Die Gesamtanzahl der dabei ersetzten Zeichen und di
e geänderte Zeichenkette werden ausgegeben.
Lösungsbeispiele:
Eingabe: Ausgabe:
Faust 2 Feist
Augenhaut 4 Eigenheit
Natriumhydrogencarbonat 0 Natriumhydrogencarbo (wi
rd abgeschnitten!)
Sitze seid gestern schon auf dieser Aufgabe, bekomme es aber einfach nicht hin. Da in der Prüfung sehr wahrscheinlich so eine ähnliche Aufgabe dran kommen könnte, würde ich gerne jmd um Rat bitten.
Schreiben Sie ein Programm mit folgender Leistung
:
Eine Zeichenkette von maximal 20 Zeichen wird einge
lesen, wobei man annehmen darf, dass die
eingegebene Zeichenkette keine Leerzeichen enthält.
Wenn in der eingelesenen Zeichenkette die Doppelvok
ale "au", "Au", "aU" oder "AU" auftreten, werden si
e
durch die Kombinationen "ei", "Ei", "eI" bzw. "EI"
ersetzt.
Die Gesamtanzahl der dabei ersetzten Zeichen und di
e geänderte Zeichenkette werden ausgegeben.
Lösungsbeispiele:
Eingabe: Ausgabe:
Faust 2 Feist
Augenhaut 4 Eigenheit
Natriumhydrogencarbonat 0 Natriumhydrogencarbo (wi
rd abgeschnitten!)
Sitze seid gestern schon auf dieser Aufgabe, bekomme es aber einfach nicht hin. Da in der Prüfung sehr wahrscheinlich so eine ähnliche Aufgabe dran kommen könnte, würde ich gerne jmd um Rat bitten.
Re: Ersetzen von Zeichenketten
Wie sieht denn dein aktueller Versuch aus das Problem zu lösen?
-
- Beiträge: 9
- Registriert: Sa Feb 07, 2015 11:42 am
Re: Ersetzen von Zeichenketten
Hier mein Programm :
Habe mir im Internet eine Vorlage herausgesucht und es dann bearbeitet, das Ergebnis seht ihr morgen. Das Programm öffnet sich zwar, doch arbeitet nicht korrekt. Das Programm sieht mir etwas kompliziert aus, gibt es vielleicht eine einfachere Option. Kann man ohne Pointer und Funktion ein Programm schreiben, was das selbe Problem löst ? Hoffe, dass mir einer weiterhelfen kann.
MfG Johnny_Truelove
Edit by cloidnerux: Code-Tags, formatierung
Code: Alles auswählen
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int replace_character(char* string, char from, char to)
{
int result = 0;
if (!string) return 0;
while (*string != '\0')
{
if (*string == from)
{
*string = to;
result++;
}
string++;
}
return result;
}
int main(void)
{
char text[20];
int result;
printf("\nZeichenkette: ");
fgets(text,20,stdin);
result = replace_character(text, 'au', 'ei ');
result = replace_character(text, 'Au', 'Ei ');
result = replace_character(text, 'aU', 'eI ');
result = replace_character(text, 'AU', 'EI ');
printf("%u Ersetzungen: %s\n", result, text);
return 0;
}
MfG Johnny_Truelove
Edit by cloidnerux: Code-Tags, formatierung
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Ersetzen von Zeichenketten
Kann man, das macht es aber nicht so viel einfacher.Kann man ohne Pointer und Funktion ein Programm schreiben
Statt per Pointer auf den String zugreifen den String als Array nutzen:
Code: Alles auswählen
string[i] = to;
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
-
- Beiträge: 9
- Registriert: Sa Feb 07, 2015 11:42 am
Re: Ersetzen von Zeichenketten
Also die Zeichen werden zwar ausgetauscht, doch gibt das Programm nicht wieder, wie viele Zeichen es ausgetauscht hat. Kann mir da jmd helfen ?
Also ganz werden die Zeichen doch nicht ausgetauscht, bei dem Wort Augenhaut wird nur Aigenhait anstatt Eigenheit ausgegeben.
MfG Johnny_Truelove
Also ganz werden die Zeichen doch nicht ausgetauscht, bei dem Wort Augenhaut wird nur Aigenhait anstatt Eigenheit ausgegeben.
MfG Johnny_Truelove
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Ersetzen von Zeichenketten
Das ist genau das, was du auch programmiert/kopiert hast!Also die Zeichen werden zwar ausgetauscht, doch gibt das Programm nicht wieder, wie viele Zeichen es ausgetauscht hat. Kann mir da jmd helfen ?
Also ganz werden die Zeichen doch nicht ausgetauscht, bei dem Wort Augenhaut wird nur Aigenhait anstatt Eigenheit ausgegeben.
Wenn du dir die Signatur der Funktion anschaust:
Code: Alles auswählen
int replace_character(char* string, char from, char to)
'Ai' ist kein Zeichen, sondern ein String, weil es mehr als zwei Zeichen beinhaltet.
Um nun deine Zeichenketten zu ersetzen brauchst du eine Funktion, die 3 Strings(string, from, to) entgegen nimmt, den String "from" in "string" sucht und alle Vorkommnisse mit "to" ersetzt.
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
-
- Beiträge: 9
- Registriert: Sa Feb 07, 2015 11:42 am
Re: Ersetzen von Zeichenketten
Wie würde es dann ungefähr aussehen ? Kannst du mir eine kleine Hilfestellung geben ?
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Ersetzen von Zeichenketten
Auch hier greift wieder das Prinzip: Teile und Herrsche:
Strings in anderen zu ersetzten besteht aus zwei Teilproblemen:
Den zu ersetzenden String finden und
Die Gefundenen Vorkommnisse zu ersetzen.
Kümmern wir uns erst um Punkt 2:
Wie ersetze ich einen Teil eines Strings? Indem ich ihn überschreibe:
Nun musst du nur noch alle Vorkommnisse eines strings innerhalb eines anderen finden, das kann man z.B so machen:
Wenn man nun beide Teilprobleme gelöst hat, kann man beides zusammen fügen und das Gesamtproblem lösen.
für die Funktionsweise der verwendeten Funktionen "strlen" und "strcmp" verweise ich dich mal auf das Wiki:
https://www.proggen.org/doku.php?id=c:lib:string:start
Strings in anderen zu ersetzten besteht aus zwei Teilproblemen:
Den zu ersetzenden String finden und
Die Gefundenen Vorkommnisse zu ersetzen.
Kümmern wir uns erst um Punkt 2:
Wie ersetze ich einen Teil eines Strings? Indem ich ihn überschreibe:
Code: Alles auswählen
char * string = "Das ist ein super toller sample Text!";
char * replace = "test";
int offset = 0;
for(int i = 0; i < strlen(replace); i++)
{
string[offset + i] = replace[i];
}
Code: Alles auswählen
char * string = "Das ist ein super toller sample Text!";
char * from = "Da";
for(int i = 0; i < (strlen(string) - strlen(from)); i++)
{
if(strcmp(string+i, from) == 0)
//wir haben ein Vorkommnis an der Stelle i gefunden.
}
für die Funktionsweise der verwendeten Funktionen "strlen" und "strcmp" verweise ich dich mal auf das Wiki:
https://www.proggen.org/doku.php?id=c:lib:string:start
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
-
- Beiträge: 9
- Registriert: Sa Feb 07, 2015 11:42 am
Re: Ersetzen von Zeichenketten
Habe es nochmal versucht, hier mein Ergebnis :
folgende Fehlermeldung erhalte ich:
Edit by cloidnerux: Code-Tags
Code: Alles auswählen
#include <stdio.h>
#include <string.h>
void tausche(char *text,char *replace)
{
int offset=0;
int i=0;
for(i=0;i<strlen(replace);i++)
{
text[offset+i] = replace[i];
}
}
main()
{
char text[20];
printf("\nBitte einen Satz eingeben\n");
fgets(text,20,stdin);
tausche(text);
printf("%s",text);
}
Code: Alles auswählen
bspl0062.c: In function ‘main’:
bspl0062.c:22:3: error: too few arguments to function ‘tausche’
bspl0062.c:4:6: note: declared here
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Ersetzen von Zeichenketten
Was sagt dir die Fehlermeldung?folgende Fehlermeldung erhalte ich:
Was steht in Zeile 22?
Das Schöne am Programmieren ist, dass dir dein Compiler genau sagt, was ihn stört. Von daher lohnt es sich immer, die Fehlermeldungen aufmerksam durchzulesen.
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum