Нужно написать программу, которая считывает английский текст, вводимый с клавиатуры, и выводит на экран слова, начинающиеся и заканчивающиеся на гласные буквы. Пробовал написать, но выводит только первое слово, если оно удовлетворяет условиям. Если не удовлетворяет, то не пишет ничего, то есть дальше первого слова проверка не заходит
int main(int argc, char *argv[]) { char s[1024] = ""; gets(s); int pos = 0; // текущий индекс int wordStart = 0; // индекс начала слова for (;;) { // (условие выхода обрабатывается внутри) char c = s[pos]; if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) { pos++; // буква; пропускаем } else { if (wordStart < pos) { // слово, как таковое, было (нет нужды проверять пробелы) int wordEnd = pos - 1; // индекс конца слова int check = 0; while (check < 2) { // попытка избежать повторяющегося кода c = check == 0 ? s[wordStart] : s[wordEnd]; // проверяем начало и потом конец switch (c) { case 'A': case 'E': case 'I': case 'O': case 'U': case 'Y': case 'a': case 'e': case 'i': case 'o': case 'u': case 'y': check++; // гласные буквы проходят проверку continue; } break; // прочие символы завершают цикл проверки } if (check == 2) { // и начало и конец гласные for (int i = wordStart; i <= wordEnd; i++) printf("%c", s[i]); // вывод слова printf(";\n"); } } wordStart = ++pos; // переставляем начало слова if (c == 0) break; // если строка кончилась, выходим } } getch(); }
"That cow ate all the things I loved" выведет "ate; I;".
Думал можно сократить - по другому принципу сделать. А вышло почти столько же -------------------------- Два раза переправлял, вот так вроде короче. Ну и пусть так остается, а то запало в голову - никак не переключусь на что-то более полезное.
Код
#include <stdio.h> #include <conio.h>
int main(int argc, char *argv[]) { char str [1024] = ""; int b = -1; unsigned int u = 0; gets(str+1); for (u = 1; str[u] != '\0'; u++) if ((str[u]<'A' || str[u]>'z') || (str[u]>'Z' && str[u]<'a')) str[u] = '\0'; for (; u != 0; u--) { if ( (str[u] == '\0') ) { switch (str[u+b]) { case 'A': case 'E': case 'I': case 'O': case 'U': case 'Y': case 'a': case 'e': case 'i': case 'o': case 'u': case 'y': if (b == 1) printf("%s%s", &(str[u+b]), ";\n"); else { b = 1; continue; } } if (b == 1) { b = -1; u++; } } } getch(); return 0; }
Сообщение отредактировал Modelkin - Пятница, 27 Февраля 2015, 16:38