Понедельник, 11 Ноября 2024, 04:04

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Помогите написать программу
RamilyanamanaДата: Четверг, 26 Февраля 2015, 09:01 | Сообщение # 1
Биззи Джей Ужасный
Сейчас нет на сайте
Нужно написать программу, которая считывает английский текст, вводимый с клавиатуры, и выводит на экран слова, начинающиеся и заканчивающиеся на гласные буквы.
Пробовал написать, но выводит только первое слово, если оно удовлетворяет условиям. Если не удовлетворяет, то не пишет ничего, то есть дальше первого слова проверка не заходит



Snake174Дата: Четверг, 26 Февраля 2015, 15:33 | Сообщение # 2
участник
Сейчас нет на сайте
Выкладывай код. Кто-нибудь чем-нибудь да поможет )

Не следует обманывать инспектора
Pipmak Assistant
Love2D Exporter
Love2D-Helpers
Old Consoles Games
YellowAfterlifeДата: Четверг, 26 Февраля 2015, 16:15 | Сообщение # 3
Сейчас нет на сайте
Наверное, можно написать и короче, но что делать.
Код
#include <stdio.h>
#include <conio.h>

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;".


ModelkinДата: Пятница, 27 Февраля 2015, 15:21 | Сообщение # 4
почетный гость
Сейчас нет на сайте
Думал можно сократить - по другому принципу сделать. А вышло почти столько же smile
--------------------------
Два раза переправлял, вот так вроде короче. Ну и пусть так остается, а то запало в голову - никак не переключусь на что-то более полезное.
Код
#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
RamilyanamanaДата: Пятница, 27 Февраля 2015, 15:47 | Сообщение # 5
Биззи Джей Ужасный
Сейчас нет на сайте
YellowAfterlife, спасибо большое вам. выручили. все работает. благодарю

Добавлено (27 февраля 2015, 15:47)
---------------------------------------------
Modelkin, спасибо за старания. проверять не буду уже



  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг