Написать программу с комментарием - C (СИ)
Формулировка задачи:
Ввести строку, вывести только слова, заканчивающиеся на гласную букву.
Решение задачи: «Написать программу с комментарием»
textual
Листинг программы
void ptrf(char *s, int n) //Функция вывода строки фиксированой длины
{
int i;
for(i = 0; i < n;i++,++s)
putchar(*s);
putchar('\n');
}
void gets1(char *s) {
int c;
while((c = getchar()) != '\n') {
*s = c;
*++s;
}
*s = '\0';
}
int main() {
char stroka[200];
gets1(stroka);//Считываем нужную строку
char *r = stroka;//Указатель указывает на первое stroka[0]
int z = 0;//Здесь будет храниться длина слова
while(1) {
if(*r == ' '|| *r == '\0') {//Если символ равен пробелу или знаку пунктуации
switch(*(r-z)) {//Проверяем гласная ли буква
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
ptrf(r-z, z); break;//Выводим слово по указателю, так как z - длина слова то начало слова - r-z
}
if(*r == '\0') break;
++r;
z = 0;//Обнуляем длину слова
continue;
}
z++;
*++r;
}
}
Объяснение кода листинга программы
- В функции
ptrfпроисходит вывод строки фиксированной длины. - В функции
gets1считывается строка до символа новой строки. - В функции
mainсчитывается строка с помощьюgets1и сохраняется в массивеstroka. - Указатель
rуказывает на первый символ вstroka, а переменнаяzинициализируется нулем и используется для хранения длины слова. - В бесконечном цикле
while(1)проверяется, является ли текущий символ пробелом или знаком пунктуации. - Если текущий символ является пробелом или знаком пунктуации, выполняется оператор
switch, который проверяет, является ли предыдущая буква гласной. - Если предыдущая буква является гласной, вызывается функция
ptrf, которая выводит слово, начиная с указателяr-zи длинойz. - Если текущий символ является символом новой строки, цикл прерывается.
- Если текущий символ не является пробелом или знаком пунктуации, увеличивается значение
z, указывающее на длину слова, и текущий символ добавляется в конец слова. - После каждой итерации цикла значение
zсбрасывается в ноль, чтобы указать на новую строку.