Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2023, 03:27   #1
Iney
Новичок
Джуниор
 
Регистрация: 16.01.2023
Сообщений: 2
Смех Написать программу на C++ без подключения библиотек

Здравствуйте. Нужно ооочень срочно!

Слова текста из малых латинских букв записаны не менее чем через один пробел; текст оканчивается точкой. БЕЗ ИСПОЛЬЗОВАНИЯ конструкции STRING:

а) написать программу ввода такого текста с клавиатуры;

б) напечатать все слова, отличающиеся от последнего слова, во всех словах текста, оканчивающихся на ov, ova, in, ina, ev, eva, заменить это окончание на idze.

Я немного написала начало. Но закончить не могу.
помогите пожалуйста
Код:
int main() {
char c, ch;
int i = 0;
char string[80];
do {
c = _getch();
if (c >= ‘a’ && c <= ‘z’ || c == ’ ’ || c == ‘.’) {
if (i < 79) {
_putch(c);
string[i] = c;
++i;
}
else {
}
}
else if (c == 8) {
_putch(8);
if (i > 0) {
–i;
}
_putch(32);
_putch(8);
}
} while (c != ‘.’);
}
Iney вне форума Ответить с цитированием
Старый 18.01.2023, 05:18   #2
Пётр Седов
Форумчанин
 
Регистрация: 26.10.2022
Сообщений: 119
По умолчанию

Код:
#include <assert.h>
#include <stdio.h>

bool is_lower_letter(char elem) {
  return ('a' <= elem) && (elem <= 'z');
}

struct word_t { // std::string_view для бедных
  const char* elems; // не завершается нулевым элементом ('\0')
  int len;
};

bool equals(word_t w1, word_t w2) {
  if (w1.len != w2.len) {
    return false;
  }
  // здесь можно использовать стандартную функцию memcmp
  for (int i = 0; i < w1.len; i++) {
    if (w1.elems[i] != w2.elems[i]) {
      return false;
    }
  }
  return true;
}

bool ends_with_2(word_t w, const char* ending) {
  assert(ending[2] == '\0'); // длина строки ending должна быть 2
  return (w.len >= 2) && (w.elems[w.len - 2] == ending[0]) && (w.elems[w.len - 1] == ending[1]);
}

bool ends_with_3(word_t w, const char* ending) {
  assert(ending[3] == '\0'); // длина строки ending должна быть 3
  return (w.len >= 3) && (w.elems[w.len - 3] == ending[0]) && (w.elems[w.len - 2] == ending[1]) && (w.elems[w.len - 1] == ending[2]);
}

int main() {
  // массив фиксированного размера, для учебного задания сойдёт
  const int max_text_len = 80;
  char text[max_text_len + 1];
  gets(text);

  // разбиваем текст на слова
  const int max_words_count = max_text_len / 2;
  word_t words[max_words_count];
  int words_count = 0;
  int pos = 0;
  for (;;) {
    while (text[pos] == ' ') {pos++;} // пропускаем пробелы
    if (text[pos] == '.') {break;} // если дошли до конца текста
    if (!is_lower_letter(text[pos])) {
      printf("Invalid text element at position %i.\n", pos);
      return 1;
    }
    int start = pos;
    do {
      pos++;
    } while (is_lower_letter(text[pos]));
    assert(words_count < max_words_count);
    words[words_count].elems = text + start;
    words[words_count].len = pos - start;
    words_count++;
  }

  for (int i = 0; i < words_count - 1; i++) {
    word_t word = words[i];
    if (!equals(word, words[words_count - 1])) {
      bool removed_ending;
      if (ends_with_2(word, "ov")) {
        word.len -= 2;
        removed_ending = true;
      } else if (ends_with_3(word, "ova")) {
        word.len -= 3;
        removed_ending = true;
      } else if (ends_with_2(word, "in")) {
        word.len -= 2;
        removed_ending = true;
      } else if (ends_with_3(word, "ina")) {
        word.len -= 3;
        removed_ending = true;
      } else if (ends_with_2(word, "ev")) {
        word.len -= 2;
        removed_ending = true;
      } else if (ends_with_3(word, "eva")) {
        word.len -= 3;
        removed_ending = true;
      } else {
        removed_ending = false;
      }
      printf("%.*s", word.len, word.elems);
      if (removed_ending) {
        printf("idze");
      }
      printf("\n");
    }
  }

  return 0;
}
Ввод:
Код:
ivanov end petrenko end.
Вывод на консоль:
Код:
ivanidze
petrenko
Пётр Седов вне форума Ответить с цитированием
Старый 20.01.2023, 02:11   #3
Iney
Новичок
Джуниор
 
Регистрация: 16.01.2023
Сообщений: 2
По умолчанию

Пётр Седов, спасибо большое
Iney вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Необходимо нарисовать схему подключения микропроцессора, составить алгоритм и написать программу на Assembler OLZY Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 12.12.2015 00:37
Ошибка после подключения библиотек Krasi Qt и кроссплатформенное программирование С/С++ 2 03.11.2011 10:43
Как написать try catch для подключения SevenXP C/C++ Сетевое программирование 1 23.06.2011 21:48
Переписать программу с С++ на Delphi 7 (импорт библиотек) at0104 Общие вопросы Delphi 1 13.04.2011 18:45
Заплачу за программу подключения к Интернет. probov Фриланс 2 05.01.2010 07:10