• ПОМОГИТЕ ПОЖАЛУЙСТА

    На изученном вами языке программирования составьте программу для замены в данном тексте всюду: части ДЕТЕКТИВ на часть РОМАН

    Например, текст
    ДЕТЕКТИВ БЕЗ ПОГОНИ - ЭТО НЕ ДЕТЕКТИВ
    должен стать таким:
    РОМАН БЕЗ ПОГОНИ - ЭТО НЕ РОМАН,
    а из текста
    НЕ МОГУ ЗАСНУТЬ БЕЗ ДЕТЕКТИВА
    должен получиться текст
    НЕ МОГУ ЗАСНУТЬ БЕЗ РОМАНА.

Ответы 2

  • Вот исходник. заменишь строку и искомые слова./***   Программа решает задачу:  Дана строка символов. Группы символов,*   разделенные пробелами (одним или несколькими) и не содержащие пробелы*   внутри себя, будем называть словами.*   Заменить в строке слова S на слова W ( S, W - заданы).*  *   *///---------------------------------------------------------------------------#include <stdio.h>#include <string.h>#include <stdlib.h>#include <ctype.h>#define bool int#define true 1#define false 0#define MAX(x, y) (((x) > (y)) ? (x) : (y))#define SPACE ' '// Подпрограмма определяет, является ли группа символов словом.bool isWordc (const char*const str, const char*const begin, int len);//---------------------------------------------------------------------------#pragma argsusedint main(int argc, char* argv[]){        const char*const def_str = "Ехал   грека   через реку , видит грека – в реке рак. Сунул грека  руку в реку, рак за руку греку – цап! рекурсия рукавицы"; const char* S[] =                          { "грека", "реку", "руку", "рак",  "ААА" }; const char* W[sizeof(S) / sizeof(char*)] = { "ААА",   "поле", "ногу", "мышь", "Грека" };        const int countS = sizeof(S) / sizeof(char*);        int i, offset, delta, isWord;        char* pos; char* str = (char*)malloc(strlen(def_str)+1); if (!str) return 1; memcpy(str, def_str, strlen(def_str)+1); for ( i = 0; i < countS; ++i) { pos = str; while ((pos = strstr(pos, S[i])) != NULL) { // Группы символов, разделенные пробелами, будем называть словами.                       if (isWordc(str,pos,strlen(S[i])) == true) { if (strlen(S[i]) != strlen(W[i])) {                                        // При разной длине - компенсируем разницу, т.е при замене рак на раковина не должны портиться другие данные. delta = strlen(S[i]) - strlen(W[i]); if (delta < 0) { offset = pos - str; str = (char*)realloc(str, strlen(str) + 1 - delta ); if (!str) return 1; str[strlen(str) - delta] = '\0'; pos = str + offset; memmove(pos - delta, pos, strlen(pos)); } memset(pos, SPACE, MAX(strlen(W[i]), strlen(S[i]))); // Замена "грека" на "АА" = "АА___" } strncpy(pos, W[i], strlen(W[i])); } pos += strlen(S[i]); } }    free(str);        return 0;}//---------------------------------------------------------------------------//---------------------------------------------------------------------------// Подпрограмма определяет, является ли группа символов словом.bool isWordc(const char*const str, const char*const begin, int len) {     bool lhs,rhs;  // ( рак и раковина разные слова.)     // Приведение к (unsigned char) необходимо т.к. функции isspace и ispunct делают проверку (A>-1 && A<=255).     lhs = (begin == str); // Исключаем выход за границы.     lhs = lhs || (isspace((unsigned char) *(begin - 1))  || ispunct((unsigned char) *(begin - 1)));     rhs =         isspace((unsigned char) *(begin + len))|| ispunct((unsigned char) *(begin + len));     return lhs && rhs;}//---------------------------------------------------------------------------
    • Автор:

      nutmeg
    • 6 лет назад
    • 0
  • // PascalABC.NET 3.2, сборка 1374 от 10.01.2017// Внимание! Если программа не работает, обновите версию!begin  var s:=ReadlnString('>');  s:=s.Replace('ДЕТЕКТИВ','РОМАН'); s.Printlnend.Примеры> ДЕТЕКТИВ БЕЗ ПОГОНИ - ЭТО НЕ ДЕТЕКТИВРОМАН БЕЗ ПОГОНИ - ЭТО НЕ РОМАН> НЕ МОГУ ЗАСНУТЬ БЕЗ ДЕТЕКТИВАНЕ МОГУ ЗАСНУТЬ БЕЗ РОМАНА
  • Добавить свой ответ

Еще вопросы

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years