1

Тема: допоможіть(С++(стрічки))

ось завдання

Прихований текст

Написати програму, яка заміняє всі входження деякого фрагмента (вводимо з клавіатури) на той самий фрагмент, тільки записаний у зворотньому порядку(word -> drow);

а ось код

Прихований текст
#include <iostream>
#include <conio.h>
using namespace std;
void mystrstr(char*str1, char*str3);
char *mystrchr(char*str1, char s);
void main() {
    char s = 0;
    setlocale(LC_ALL, "ru");
    const int a = 100;
    char str1[a];
    cout << "Введiть стрiчку : ";
    gets_s(str1);
    char str3[a];
    cout << "Введiть стрiчку : ";
    gets_s(str3);
    mystrstr(str1, str3);
    puts(str1);
    cout << "\n";
    system("pause");
}
void mystrstr(char *str1, char *const str2) {
    int ii = strlen(str2);
    int n = ii;
    for (int i = 0; str1[i] != 0; i++) {
        if (!*str2) {
            str1[i] = str2[ii];
            ii--;
        }
        if (ii == 0) {
            ii = n;
        }
    }
}
char *mystrchr(char *str, char s) {
    while (*str && *str != s) ++str;
    return *str == s ? str : nullptr;
}

виводить стрічку без реверсу(підстрічки в стрічці)

2

Re: допоможіть(С++(стрічки))

і це не допомогло

Прихований текст
#include <iostream>
#include <conio.h>
using namespace std;
char *mystrrev(char const *str);
void mystrstr(char *str1, char *const str2);
char *mystrchr(char*str1, char s);
void main() {
    char s = 0;
    setlocale(LC_ALL, "ru");
    const int a = 100;
    char str1[a];
    cout << "Введiть стрiчку : ";
    gets_s(str1);
    char str3[a];
    cout << "Введiть стрiчку : ";
    gets_s(str3);
    mystrstr(str1, str3);
    puts(str1);
    cout << "\n";
    system("pause");
}
char *mystrrev(char const *str) {
    int len(strlen(str));
    char *rev = new char[len + 1], *ptr(rev + len);
    *ptr = '\0';
    while (*str) *--ptr = *str++;
    return rev;
}
void mystrstr(char *str1, char *const str2) {
    int n = strlen(str2);
    int ii = 0;
    char* str3 = mystrrev(str2);
    for (int i = 0; str1[i] != 0; i++) {
        if (!*str2) {
            str1[i] = str3[ii];
            ii++;
        }
        if (ii == n) {
            ii = 0;
        }
    }
}
char *mystrchr(char *str, char s) {
    while (*str && *str != s) ++str;
    return *str == s ? str : nullptr;
}

3

Re: допоможіть(С++(стрічки))

Знаєте, зазвичай коментувати кожний рядок банальною констатацією того, що він робить, на кшталт

int x=5; //створити змінну x зі значенням 5

є зайвим; але тут я хочу зрозуміти вашу логіку. Що ви взагалі хотіли тут зробити? Можете хоча б рядки 9, 33-39 та 43 так прокоментувати?

4

Re: допоможіть(С++(стрічки))

Ну а взагалі - у вас вже був у іншій гілці mystrstr, який працював, як стандартний; то й робіть (псевдокодом)

char *зворот = mystrrev(слово)
while(mystrstr(стрічка, слово)!=nullptr){
  замінити( mystrstr(стрічка, слово), зворот, mystrlen(зворот))
}

вам потрібна лише функція "замінити", що копіює задану кількість символів з однієї стрічки до іншої, на кшталт strncat. Можливо, навіть третій параметр їй не потрібен, хай сама обчислює.
Ну і код вище треба сильно оптимізувати, але він ідею показує.