Загрузка...

Задачка по Си.

Тема в разделе C/C++ создана пользователем Muha665161 29 ноя 2022. 226 просмотров

  1. Muha665161
    Muha665161 Автор темы 29 ноя 2022 67 3 дек 2019
    [IMG]

    Функцию я написал, а что делать дальше не знаю

    #include <stdio.h>
    #include <stdlib.h>
    #include <Windows.h>
    #include <locale>


    int index(const char* str, const char c)
    {
    int index = 0;
    const char* p = str;
    while (p)
    {
    if (*p == c) return index;
    index++;
    p++;
    }
    return -1;
    }


    int main()
    {
    setlocale(LC_ALL, "ru");
    char str[255] = { 0 };
    char c;
    printf("Enter string = ");
    SetConsoleCP(1251);
    fgets(str, 255, stdin);
    printf("Enter Symbol = ");
    scanf_s("%c", &c);
    SetConsoleCP(866);
    printf("Индекс первого элемента = %d", index(str, c));
    return 0;
    }

     
  2. M1h4n1k
    M1h4n1k 29 ноя 2022 Ответы skysmart - t.me/SkyAnsBot 272 4 май 2021
    запустить?
     
    1. Muha665161 Автор темы
      M1h4n1k, Выводит значение только первого индекса, а мне надо всех
    2. vtlstolyarov
      Muha665161, поменяй сигнатуру фнкции чтобы принимала не только строку и сивол но и
      int offset
      - отступ от начала строки с которого надо начинать поиск. тогла после каждого вызова продолжаешь вызывать с новым отступом пока функция не вернет -1

      ну или можно сигнутуру оставить как есть, но каждый раз передавать сдвинутый указатель
  3. KinetiK
    KinetiK 29 ноя 2022 20 066 18 янв 2020
    while(index(str) != -1){
    int result = index(str);
    printf(index);
    str += index + 1;
    }
     
    29 ноя 2022 Изменено
    1. Посмотреть предыдущие комментарии (2)
    2. vtlstolyarov
      KinetiK, ты изменил свой код после того как я написал сообщение, так что я был прав
    3. vtlstolyarov
      KinetiK, и даже с исправлением решение всё еще не верное - возвращаемый функцией индекс - это индекс на сдвинутой строке, так что при печати к нему надо добавлять изначальный сдвиг. ну и по мелочам - ты попутал имя переменной и имя функции (потому что торопился исправить то о чём я написал в первом комменте)
    4. KinetiK
      vtlstolyarov, я ничего не писал, это псевдокод решения
  4. KinetiK
    KinetiK 29 ноя 2022 20 066 18 янв 2020
    ты обрезаешь строку каждый раз на индекс найденного символа
     
  5. Joker9019
    Joker9019 5 дек 2022 Заблокирован(а) 3 27 ноя 2022
    Muha665161,
    C
    ```c++

    #include <iostream>

    #include <string>

    using namespace std;

    int findIndex(string str, char ch)

    {

    for (int i = 0; i < str.length(); i++)

    {

    if (str[i] == ch)

    return i;

    }

    return -1;

    }

    int main()

    {

    cout << "Enter string: ";

    string str;

    cin >> str;

    cout << "Enter character: ";

    char ch;

    cin >> ch;

    int index;

    do

    {

    index = findIndex(str, ch);

    if (index != -1)

    {

    cout << index << endl;

    str.erase(index, 1);

    }

    } while (index != -1);

    return 0;

    }

    ```
     
Top
Загрузка...