Загрузка...

Need help writing a C program

Thread in C/C++ created by trixter_inactive4548223 Oct 8, 2021. 253 views

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


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

    У класса string в c++ есть метод как раз для этой задачи:
    Code
    #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;
    }
    Моё решение в стиле си (очень стрёмное):
    Code
    #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
Loading...