C :: Aufgabe #119

1 Lösung Lösung öffentlich

Pig Latin - Schweine Latein

Anfänger - C von DrizZle - 15.06.2016 um 13:57 Uhr
Hier zum Wikipedia Post

Einführung:

Zitat:

Pig Latin (engl.; wörtlich: Schweine-Latein) bezeichnet eine Spielsprache, die im englischen Sprachraum verwendet wird.
Sie wird vor allem von Kindern benutzt, aus Spaß am Spiel mit der Sprache oder als einfache Geheimsprache, mit der Informationen vor Erwachsenen oder anderen Kindern verborgen werden sollen.


Erklärung:

Zitat:

Beginnt das Wort mit einem Konsonanten, so wird der initiale Konsonant oder Konsonantencluster ans Ende des Wortes verschoben und ein „ay“ angehängt. Zu betrachten ist hierbei nicht die Rechtschreibung, sondern die tatsächliche Aussprache: „Stumme“ Konsonantenbuchstaben, wie z. B. das „h“ in „honor“, sind keine Konsonanten.

loser → oser-lay
button → utton-bay
star → ar-stay
three → ee-thray
question → estion-quay
happy → appy-hay
Pig Latin → Ig-pay Atin-lay

Beginnt das Wort mit einem Vokal oder einem stummen Konsonanten, so wird direkt ein „ay“ angehängt.

eagle → eagle-ay
America → America-ay
honor → honor-ay


Aufgabe:
Schreibt ein Programm welches ein belibiges Wort ins Schweine Latein umwandelt und ausgibt. Auf die Regel mit Stummen H's kann man verzichten.

Lösungen:

vote_ok
von devnull (8870 Punkte) - 25.11.2016 um 13:36 Uhr

Konsolenausgabe:

$ ./piglatin loser button star three question happy Pig Latin eagle Americ honor
oserlay
uttonbay
arstay
eethray
estionquay
appyhay
Igpay
Atinlay
eagleay
Americay
onorhay

Quellcode ausblenden C-Code
/****************************************
 * piglatin.c   Schweine-Latein
 ****************************************/
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>

char vocals[] = {'a', 'e', 'i', 'o', 'u'};
int cvocals = sizeof(vocals)/sizeof(char);

int main(int argc, char **argv) {
	char word[256];
	char *pw, *pwb, *pv;
	int argi, vi, uc;

	for (argi=1; argi<argc; argi++) {
		/* search 1st vocal in word */
		pwb = pw = argv[argi];
		pv = NULL;
		while (*pw && pv==NULL) {
			for (vi=0; vi<cvocals; vi++)
				if (*pw == vocals[vi] || \
				    *pw == toupper(vocals[vi])) {
					pv = pw;
					/* exceptional case 'qu' */
					if (*pw == 'u' && tolower(*(pw-1)) == 'q')
						pv++;
					break;
			}
			pw++;
		}
		if (pv != NULL) {
			uc = (*pwb <= 'Z');		/* marker upper case */
			strcpy(word, pv);
			*pv=0;
			strcat(word, pwb);
			strcat(word, "ay");
			pw = word;
			if (uc)
				*pw = toupper(*pw);
			while (*(++pw))
				*pw = tolower(*pw);
			printf("%s\n", word);	/* Pig Latin word */
		}
		else
			printf("%s\n", pwb);	/* unchanged input word */
	}
	return 0;
}