Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > ПОМОЩЬ СТУДЕНТАМ > Замена слов в строке


Автор: sern 03.05.20, 16:01
Добрый день.Возникла такая проблема- есть str,slovo,zamena - вводятся с клавиатуры пользователем. Все динамические массивы.str-строка,slovo-слово которое необходимо заменить в строке,zamena-слово на которое необходимо заменить.И вывести измененную строку.Мой вариант(нашел на форуме)не работает,что не так?
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    char replaces_word(char*str, char*slovo, char*zamena) {
     
        char* strSubString = strstr(str, slovo);
        const int nMainLen = strlen(str);
        const int nSecondaryLen = strlen(slovo);
        const int nSubStringLen = strlen(strSubString);
        const int nNewLen = strlen(zamena);
     
        char* strResult = new char[nMainLen - nSecondaryLen + nNewLen + 1];
     
        strncpy(strResult, slovo, (int)(str - slovo));
        strcat(strResult, zamena);
        strncat(strResult, strSubString + nSecondaryLen, nMainLen - nSecondaryLen - nSubStringLen);
        printf(strResult);
        return 0;
     
    }

Автор: Славян 03.05.20, 17:08
Во-первых, совершенно непонятно зачем вы в первой строке результата (strncpy(strResult, slovo, (int)(str - slovo))) копируете ненужный кусок в результат. slovo ж надо было найти и заменить, а вы его вовсе не забываете.
Во-вторых, str и slovo - лежат в памяти, причём могут в разных гигабайтах её!!! А значит выражение (int)(str - slovo) ну явно неправильное. ;)

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)