#include <stdio.h>
// for readability not advocating the
// usage of #define booleans etc
#define TRUE 1
#define FALSE 0
int isVowel (char c)
{
switch (c)
{
case 'a': return TRUE;
case 'e': return TRUE;
case 'i': return TRUE;
case 'o': return TRUE;
case 'u': return TRUE;
case 'A': return TRUE;
case 'E': return TRUE;
case 'I': return TRUE;
case 'O': return TRUE;
case 'U': return TRUE;
}
return FALSE;
}
int hasOrderedVowels (char *str)
{
char c1, c2;
c1 = *str;
c2 = *(++str);
// ignore words beginning in vowels other then 'a' or 'A'
if ((isVowel(c1)) && !(c1 == 'a' || c1 == 'A'))
// && !(!(c1 == 'a' && c1 == 'A') && (c1 == 'a' || c1 == 'A')))
{
return FALSE;
}
do {
// ignore case of `c1`
if (c1 >= 'a')
c1 -= 32;
// ignore case of `c2`
if (c2 >= 'a')
c2 -= 32;
// compare vowels and increment
// pointers as appropriate
if (isVowel(c1) && isVowel(c2))
{
// if we have found a vowel less then or equal to current
// then they are not in order/more then one, if we have found
// a 'U' and there are more vowels then this would be a duplicate
if (c2 <= c1 || c1 == 'U')
return FALSE;
c1 = c2;
}
else if (isVowel(c2)) // found first vowel
{
if (!(c2 == 'a' || c2 == 'A'))
{
return FALSE;
}
c1 = c2;
}
else if (!isVowel(c1))
{
c1 = *(str += 2);
}
c2 = *(++str);
}
while (c2 != '\0');
return (c1 == 'U' || c1 == 'u');
}
int main ()
{
char *str[] = {"aeiou", "facecious", "chimpanze", "baboon"};
int i = 0;
for (; i<4; i++)
{
printf ("%s: %i\n", str
[i
], hasOrderedVowels
(str
[i
])); }
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgovLyBmb3IgcmVhZGFiaWxpdHkgbm90IGFkdm9jYXRpbmcgdGhlIAovLyB1c2FnZSBvZiAjZGVmaW5lIGJvb2xlYW5zIGV0YwojZGVmaW5lIFRSVUUgIDEKI2RlZmluZSBGQUxTRSAwCgppbnQgaXNWb3dlbCAoY2hhciBjKQp7CiAgICBzd2l0Y2ggKGMpCiAgICB7CiAgICAgICAgY2FzZSAnYSc6IHJldHVybiBUUlVFOwogICAgICAgIGNhc2UgJ2UnOiByZXR1cm4gVFJVRTsKICAgICAgICBjYXNlICdpJzogcmV0dXJuIFRSVUU7CiAgICAgICAgY2FzZSAnbyc6IHJldHVybiBUUlVFOwogICAgICAgIGNhc2UgJ3UnOiByZXR1cm4gVFJVRTsKICAgICAgICBjYXNlICdBJzogcmV0dXJuIFRSVUU7CiAgICAgICAgY2FzZSAnRSc6IHJldHVybiBUUlVFOwogICAgICAgIGNhc2UgJ0knOiByZXR1cm4gVFJVRTsKICAgICAgICBjYXNlICdPJzogcmV0dXJuIFRSVUU7CiAgICAgICAgY2FzZSAnVSc6IHJldHVybiBUUlVFOwogICAgfQoKICAgIHJldHVybiBGQUxTRTsKfQoKaW50IGhhc09yZGVyZWRWb3dlbHMgKGNoYXIgKnN0cikKeyAgICAKICAgIGNoYXIgYzEsIGMyOwoKICAgIGMxID0gKnN0cjsKICAgIGMyID0gKigrK3N0cik7CgogICAgLy8gaWdub3JlIHdvcmRzIGJlZ2lubmluZyBpbiB2b3dlbHMgb3RoZXIgdGhlbiAnYScgb3IgJ0EnCiAgICBpZiAoKGlzVm93ZWwoYzEpKSAmJiAhKGMxID09ICdhJyB8fCBjMSA9PSAnQScpKQogICAgICAgICAgLy8gJiYgISghKGMxID09ICdhJyAmJiBjMSA9PSAnQScpICYmIChjMSA9PSAnYScgfHwgYzEgPT0gJ0EnKSkpCiAgICB7CiAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgfQoKICAgIGRvIHsKICAgICAgICAvLyBpZ25vcmUgY2FzZSBvZiBgYzFgCiAgICAgICAgaWYgKGMxID49ICdhJykKICAgICAgICAgICAgYzEgLT0gMzI7CgogICAgICAgIC8vIGlnbm9yZSBjYXNlIG9mIGBjMmAKICAgICAgICBpZiAoYzIgPj0gJ2EnKQogICAgICAgICAgICBjMiAtPSAzMjsKCiAgICAgICAgLy8gY29tcGFyZSB2b3dlbHMgYW5kIGluY3JlbWVudAogICAgICAgIC8vIHBvaW50ZXJzIGFzIGFwcHJvcHJpYXRlCiAgICAgICAgaWYgKGlzVm93ZWwoYzEpICYmIGlzVm93ZWwoYzIpKQogICAgICAgIHsKICAgICAgICAgICAgLy8gaWYgd2UgaGF2ZSBmb3VuZCBhIHZvd2VsIGxlc3MgdGhlbiBvciBlcXVhbCB0byBjdXJyZW50CiAgICAgICAgICAgIC8vIHRoZW4gdGhleSBhcmUgbm90IGluIG9yZGVyL21vcmUgdGhlbiBvbmUsIGlmIHdlIGhhdmUgZm91bmQKICAgICAgICAgICAgLy8gYSAnVScgYW5kIHRoZXJlIGFyZSBtb3JlIHZvd2VscyB0aGVuIHRoaXMgd291bGQgYmUgYSBkdXBsaWNhdGUKICAgICAgICAgICAgaWYgKGMyIDw9IGMxIHx8IGMxID09ICdVJykKICAgICAgICAgICAgICAgIHJldHVybiBGQUxTRTsKCiAgICAgICAgICAgIGMxID0gYzI7CiAgICAgICAgfSAKICAgICAgICBlbHNlIGlmIChpc1Zvd2VsKGMyKSkgIC8vIGZvdW5kIGZpcnN0IHZvd2VsCiAgICAgICAgewogICAgICAgICAgICBpZiAoIShjMiA9PSAnYScgfHwgYzIgPT0gJ0EnKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGMxID0gYzI7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKCFpc1Zvd2VsKGMxKSkKICAgICAgICB7CiAgICAgICAgICAgIGMxID0gKihzdHIgKz0gMik7CiAgICAgICAgfQogICAgICAgIGMyID0gKigrK3N0cik7IAogICAgfSAKICAgIHdoaWxlIChjMiAhPSAnXDAnKTsKCiAgICByZXR1cm4gKGMxID09ICdVJyB8fCBjMSA9PSAndScpOwp9CgppbnQgbWFpbiAoKQp7CiAgICBjaGFyICpzdHJbXSA9IHsiYWVpb3UiLCAiZmFjZWNpb3VzIiwgImNoaW1wYW56ZSIsICJiYWJvb24ifTsKICAgIGludCBpID0gMDsKCiAgICBmb3IgKDsgaTw0OyBpKyspCiAgICB7CiAgICAgICAgcHJpbnRmICgiJXM6ICVpXG4iLCBzdHJbaV0sIGhhc09yZGVyZWRWb3dlbHMoc3RyW2ldKSk7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0=