Загрузка...

Нужна помощь в написании программы на C

Тема в разделе C/C++ создана пользователем trixter_inactive4548223 8 окт 2021. 252 просмотра

  1. trixter_inactive4548223
    trixter_inactive4548223 Автор темы 8 окт 2021 1 3 окт 2021
    Ввести строку и образец поиска. Найти позиции в строке, совпадающие с образцом и вывести их.


    что-то я просто не очень понимаю, как это сделать...
     
  2. kekuz
    kekuz 8 окт 2021 2 6 окт 2021
    Полагаю, условие должно звучать так: Даны исходная строка и подстрока. Найти в исходной строке все позиции, которые являются началом подстроки.

    У класса string в c++ есть метод как раз для этой задачи:
    Код
    #include <iostream>

    using namespace std;

    int main(int argc, char const *argv[]) {

    std::string str = "aaaaabbbaaabbaaaabbbbaaaaa";
    size_t pos = 0;
    while (true) {
    pos = str.find("bbb", pos+1);
    if(pos < str.size())
    std::cout << "Found at pos = " << pos << "\n";
    else
    break;
    }

    return 0;
    }
    Моё решение в стиле си (очень стрёмное):
    Код
    #include <stdio.h>

    int MyStrTok(const char* g_str, const char* substr)
    {
    static const char* str;
    static int it;

    if(g_str != NULL) {
    str = g_str;
    it = 0;
    return 0;
    }
    if(str == NULL)
    return -1;

    while(str[it] != '\0') {
    if(str[it] == substr[0]) {
    int it2 = it, it3 = 0, start = it;
    while(str[it2] == substr[it3] && str[it2] != '\0' && substr[it3] != '\0') {
    it2++;
    it3++;
    }
    if(substr[it3] == '\0') {
    it++;
    return start;
    }
    }
    it++;
    }
    return -1;
    }

    int main(int argc, char const *argv[]) {

    const char* str = "aaaaabbbaaabbaaaabbbbaaaaa";
    const char* substr = "bbb";

    MyStrTok(str, NULL);
    int index = 0;
    while (index != -1) {
    index = MyStrTok(NULL, substr);
    printf("%d\n", index);
    }

    return 0;
    }
    Результат: 5 17 18
     
Top
Загрузка...