Преобразовать все слова так, чтобы все гласные стояли в конце слова - C (СИ)
Формулировка задачи:
Задан список слов, перечисленных через пробел. Преобразовать все слова
так, чтобы все гласные стояли в конце слова
Решение задачи: «Преобразовать все слова так, чтобы все гласные стояли в конце слова»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <ctype.h>
char* str_part(char* s){
char* i, c, *j, *p, *t = s;
const char vs[] = "AEIUOYaeiuoy";
while((s = strpbrk(s, vs)) != NULL){
for(j = s; *j && !isspace(*j); ++j)
;
i = s;
s = j--;
while((j >= i) && (strchr(vs, *j) != NULL))
--j;
while(i < j){
if(strchr(vs, *i) != NULL){
for(p = i; p < j; ++p){
c = *p;
*p = *(p + 1);
*(p + 1) = c;
}
--j;
} else
++i;
}
}
return t;
}
int main(void){
char s[] = "0xAEF12 ABCDEF INFORMATION aeoiqweryIOxxx";
puts(s);
puts( str_part(s) );
return 0;
}
Объяснение кода листинга программы
- В функции
str_partпервый шаг - это поиск первого гласного в строкеsс помощью функцииstrpbrk, которая ищет первое вхождение любого символа из массиваAEIUOYaeiuoy. Если гласная найдена, то функция возвращает указатель на этот символ, иначе возвращаетNULL. - Затем идет поиск последнего гласного в строке
s, начиная с найденного гласного и до конца строки. Это делается с помощью циклаwhile, который продолжается, пока не будет найден гласный или не будет достигнут конец строки. - В процессе поиска последнего гласного, символы между первым гласным и последним гласным перемещаются в конец строки. Это делается с помощью цикла
while, который продолжается, пока не будет достигнут конец строки. - В конце функции возвращается исходная строка
s. - В функции
mainсоздается тестовая строкаs, содержащая некоторые символы и слова. - Строка
sвыводится на экран с помощью функцииputs. - Затем вызывается функция
str_partс аргументомs, и результат выводится на экран с помощью функцииputs. - В конце функции
mainвозвращается0, что означает успешное выполнение программы.