Программа поиска и замены печатает только исходную строку? - PullRequest
1 голос
/ 01 августа 2020

У меня есть задание по проекту для класса, и это то, что он хочет (в C)

Описание

Напишите программу, которая имитирует операцию поиска и замены в тексте редактор. Программа должна иметь только три вызова функций в «main». Первая функция предлагает пользователю ввести строку длиной менее 80 символов. Затем он предлагает пользователю ввести поисковую подстроку из 10 или менее символов. Наконец, он предлагает пользователю ввести заменяющую подстроку из 10 или менее символов. Второй вызов - это функция поиска и замены, которая заменяет все вхождения подстроки поиска на подстроку замены и создает новую строку. Если вхождений не найдено, возвращается исходная строка. Теоретически новая строка может состоять из 800 символов (80 одинаковых символов заменяются по 10 символов каждый). Ваша функция должна иметь возможность обрабатывать переполнение с помощью функции «realloc» для расширения новой строки при необходимости. (Начните с выходной строки из 80 символов и при необходимости увеличьте на 80.) Функция поиска и замены возвращает адрес новой строки.

После возврата из функции поиска и замены выводится печать функция печатает результирующую строку как серию из 80 символьных строк. Если выполняет перенос по словам. То есть строка может заканчиваться только пробелом. Если в 80 символах нет пробела, выведите 79 символов и дефис и продолжите на следующей строке. Напишите каждую вызываемую функцию, используя хорошие методы структурированного программирования. Ожидается, что при необходимости вызовут подфункции. Запустите программу не менее трех раз:

a. Во-первых, запустите его без замен в исходном вводе.

b. Во-вторых, запустите его с двумя или более заменами.

c. Наконец, запустите его с заменами, которые приводят к тому, что на выходе будет не менее трех строк, одна из которых требует дефиса.

//this is what I have. it works but for some reason it only prints the original string for question c. ?


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void meow();
void modify();
void print();



char r[10];
char str[80];
char s[10];
char ans[800];

int main() {

    meow();
    modify();
    print();
    return 0;

}

void meow() {
    printf("\nEnter a string max 80 chars \n");
    fgets(str, 80, stdin);
    printf("\nEnter a search string max 10 chars \n");
    fgets(s, 10, stdin);
    printf("\nEnter a replace string max 10 chars \n");
    fgets(r, 10, stdin);
}

void modify()
{
    int i;
    int j;
    int c;
    int m;
    int k;

    i = 0;
    m = 0;
    c = 0;
    j = 0;
    k = 0;

    while ((str[c]) != '\0') {

        //if (str[m] == s[i]) {

            if (str[m] == s[i]) {

            i++;
            m++;

                if (s[i] == '\0') {

                    for (k = 0; r[k] != '\0'; k++, j++) {

                        ans[j] = r[k];
                        i = 0;
                        c = m;
                    }
                }
            }
        


        //}
        else {
        
            ans[j] = str[c];
            j++;
            c++;
            m = c;
            i = 0;
        }
        //}

        ans[j] = '\0';
    }
}
    
    
    
void print() {
    int i, ansl;
    ansl = strlen(ans);
    if (ansl > 80) {

        for (i = 0;i < 80;i++) {
            printf("%c", ans[i]);
            printf("-\n");
        }
    }
    
    else {
        printf("%s\n", ans);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...