Я не могу выполнить ваш алгоритм, главным образом, чтобы знать, что если у вас есть гласная, вам нужно сравнивать букву со всеми возможными гласными, а не делать все свои вещи для каждой возможной гласной
После https://en.wikipedia.org/wiki/Pig_Latin и добавление 'ay' в конце (не 'way', ни 'yay' et c) возможный способ сделать это:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
char* convertToPigLatin(char* engStr, char* pLatinStr)
{
const char vowels[] = "aeiou";
if (! engStr[0])
/* empty string, not in pig latin def, decide to put ay */
strcpy(pLatinStr, "ay");
else if (strchr(vowels, engStr[0]) != NULL) {
/* starts by a vowels */
strcpy(pLatinStr, engStr);
strcat(pLatinStr, "ay");
}
else {
/* search first vowel */
char * p = engStr + 1;
while (*p && (strchr(vowels, *p) == NULL))
p += 1;
if (! *p)
/* no vowel, not in pig latin def, decide to let word unchanged */
strcpy(pLatinStr, engStr);
else {
size_t ln = strlen(p);
strcpy(pLatinStr, p);
strncpy(pLatinStr + ln, engStr, p - engStr);
strcpy(pLatinStr + ln + (p - engStr), "ay");
}
}
return pLatinStr;
}
int main(int argc, char ** argv)
{
if (argc == 2) {
char * p = malloc(strlen(argv[1]) + 3);
printf("'%s'\n", convertToPigLatin(argv[1], p));
free(p);
}
else
fprintf(stderr, "usage : %s <word>\n", *argv);
return 0;
}
конечно convertToPigLatin предполагает, что второй аргумент достаточно велик
Компиляция и выполнение:
pi@raspberrypi:/tmp $ gcc -g -Wall p.c
pi@raspberrypi:/tmp $ ./a.out ste
'estay'
pi@raspberrypi:/tmp $ ./a.out aze
'azeay'
pi@raspberrypi:/tmp $ ./a.out mommy
'ommymay'
pi@raspberrypi:/tmp $ ./a.out cf
'cf'
pi@raspberrypi:/tmp $ ./a.out ""
'ay'
pi@raspberrypi:/tmp $