Klassifizierung von Zeichenketten

jenny1106

Grünschnabel
Hallo an alle!

Ich habe noch eine Aufgabe, die mir Schwierigkeiten bereitet.

Ich soll ein C-Programm schreiben, welches wiederholt eine Zeichenkette einlesen soll und diese akzeptiert, wenn die Zeichenkette aus einer geraden Anzahl von Zeichen besteht, nur kleine Buchstaben (ohne ä, ö, ü oder ß) oder Ziffern enthält, mit einem Buchstaben beginnt und mit einer Ziffer endet und keine zwei aufeinanderfolgenden indentischen Zeichen enthält. Das Programm endet, wenn ein einzelner Punkt eingegeben wird.
Man darf zusätzlich annehmen, dass die Zeichenkette maximal 30 Zeichen enthält.

Ich weiß leider überhaupt nicht, wie man diese Bedingungen formulieren soll.

Man wird sicherlich <string.h> brauchen. Vermutlich braucht man auch eine do-while Schleife, die arbeitet bis der Punkt eingegeben wird.

Wäre super, wenn ihr mir Hinweise geben könnt.

Gruß
Jenny
 
Zuletzt bearbeitet:
char x[30], akzept;

In der Schleife setzt du akzept erst mal auf 1, liest den String ein und prüfst danach die einzelnen Sachen durch. Wenn was nicht passt, kommt akzept auf 0
Am Ende des Schleifeninhalts gibst du dann nur noch anhand akzept eine Meldung aus, obs passt
Das spart wiederholdenden Code

Als Bedingung für die dowhile-Schleife selber nimmst du zB
!strcmp(x,".")
Weiss nicht, wie sehr du dich mit Stringfunktionen auskennst: strcmp prüft, ob die beiden übergebenen Strings unterschiedlich sind. Wenn nicht, sind sie eben gleich, hier ein Punkt

Zu den Bedingungen:
1) Gerade Zeichenanzahl
Mit strlen bekommst du die Länge einer Zeichenkette, prüfen ob eine Zahl gerade ist kannst du mit %2 (der "Rest" von einer Division durch 2, bei geraden Zahlen eben 0) zB
if( (strlen(x)%2) !=0)akzept=0;
Wenns nicht 0 ist, dann wird nicht akzeptiert

2) Nur kleine Buchstaben oder Ziffernohne Umlaute:
Jeden Buchstaben bis strlen(x) in einer for-Schleife durchgehen, wenn einer davon
kleiner als 'a' oder größer als 'z' ist und auch nicht zwischen '0' und '9' ist,
passts auch nicht: akzept auf 0.

3)Anfang Buchstabe, Ende Ziffer: Wird nach 2 wohl kein Problem mehr sein
Das erste Zeichen ist eben x[0] und das letzte x[strlen(x)-1]
-1 deshalb, weil C ja bei 0 zum Zählen anfangt
Wenn der String 1 Zeichen lang ist, ist das nullte das letzte.

4) Keine gleichen Zeichen hintereinander:
Wieder eine for-Schleife, die prüft, ob der aktuelle Buchstabe gleich wie der nächste ist
if(x[ i ]==x[ i+1 ])...

Hoffe das ist halbwegs verständlich...
 
Zurück