C++,оптимизация подобия функции strstr(const char*,const char*)

171
24 июля 2019, 10:30

Вот код:

using std::cout;
int CheckArray(const char* str, const char* str1, const size_t size_N) {
    for (int i = 0; i < size_N; i++) {
        if (str[i] == str1[i]) {
        }
        else {
            return -1;
        }
    }
    return 1;
}
int mystrstr(const char* str, const char* str1) {//хотел зделать подобие strstr(const char*,const char*) только чтоб возращало номер с какого места идёт вхождение строки str1 в str
    const size_t str_size = strlen(str);//максимальный допустимый размер проверочной строки(для цикла)
    const size_t str1_size = strlen(str1);//размер строки которая подставляеться на проверку (str) на правильность в temp(тоесть temp == str1)
    char* temp = new char[str1_size];//временный массив для копирования части целевой строки и будущей проверки
    int count_up = 0;//счетчик для вставление в temp с последующим збрасыванием для сравнения новой части строки
    int i = 0;//счетчик для копирования str в temp
    for (int limit = str1_size; limit <= str_size; limit++) {//проверяем до конца строки
    //(потому что count_up будет завершать ниже приведенный цикл и копировать только target_size символов(первую часть) в temp)
        for (;count_up < str1_size; i++, count_up++) {//если count_up достигает target_size или i доходит до  max_size значит копирование части завершено
            temp[count_up] = str[i];//копируем часть строки в временный массив для проверки
        }
        if (CheckArray(temp, str1, str1_size) == 1) { // если проверка удалась
            delete[] temp;//чистим память
            return i - str1_size;//возращаем место вхождения строки str1 в str(если отсчитывать от нуля)
        }
        count_up = 0;//сбрасывание счетчика чтобы не заходить за пределы массива
        i -= str1_size - 1;//для того чтобы проверять часть строки смещяясь не на новую строку,а на один символ(ксатате фактически это сломало мне голову)
    }
    return -1;//сравнивание не удалось
}

Это мое подобие функции strstr() только оно показует место откуда начинаеться входимая строка(если отсчитывать с нуля). Хочу узнать почему я говнокодер и как мне бы оптимизировать мой код,чтоб он работал быстрее и эфективней.

READ ALSO
Ошибка при сборке драйвера MySql на Qt.

Ошибка при сборке драйвера MySql на Qt.

Все делаю по этой инструкции, но выходит ошибка qtsqldrivers-configpri: No such file or directoryЭтого файла у меня вообще нет на компьютере

155
CMake, add_subdirectory и наследование окружения

CMake, add_subdirectory и наследование окружения

Делаю проект с компиляцией под несколько платформ на c++Некоторые файлы нужно прогнать утилитой (для простоты понимания скажем, что это транспилятор)

148
Требуется подключить геймпад к плате Arduino Nano V3 (ATMega 168)

Требуется подключить геймпад к плате Arduino Nano V3 (ATMega 168)

Есть геймпад Aceline CG-1 на USB, который нужно подключить по Serial к Arduino NanoКак можно отслеживать нажатия кнопок (т

122
Z-функция. Реализация поиска

Z-функция. Реализация поиска

Требуется реализовать поиск подстроки в строке с использованием Z-функции

124