Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Osmium
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 18
#1

Найти вторую строку в первой - C++

22.10.2012, 18:10. Просмотров 502. Ответов 9
Метки нет (Все метки)

Даны две строки. Написать и проверить функцию, которая ищет вторую строку в первой, возвращая −1, если вторая строка не найдена в первой (не является её подстрокой), иначе возвращая
(первую, считая с начала первой строки) позицию второй строки в первой строке.
Я написал эту программку, но с использованием стандартной функции strstr. Нужно переделать без неё. Помогите пожалуйста
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.10.2012, 18:10     Найти вторую строку в первой
Посмотрите здесь:

Ввести строку, создать вторую строку в два раза больше, в которую записать симболы первой строки - C++
Ввести с клавиатуры строку симболов (до 20 симболов), динамически создать вторую строку в два раза больше чем введенная первая строка, в...

Вторую строку нужно скопировать в конец первой - C++
Нужно написать программу, суть такая: Вводятся с клавиатуры две строки, вторую нужно скопировать в конец первой, причем все согласные у...

Вывод числа вхождений каждого из символов первой строки во вторую строку - C++
Вопрос в названии темы, заранее спс

В первую строку вывести силы игроков первой команды, во вторую - второй - C++
N игроков хотят разбиться на две команды. Причем хотят разделиться так - самый сильный игрок - в первой команде, следующий самый сильный -...

Найти наименьшее среди чисел первой последовательности, не входящих во вторую - C++
Для тестирования предусмотреть возможность задавать элементы массива различным образом: при описании с инициализацией, присвоением значений...

Найти минимальный элемент первой последовательности, который не входит во вторую последовательность - C++
даны две последовательности по 30 целых чисел в каждой. Найти наименьшее среди тех чисел 1-ой последовательности, которые не входят во...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
774 / 707 / 129
Регистрация: 27.07.2012
Сообщений: 2,026
Завершенные тесты: 3
22.10.2012, 19:48     Найти вторую строку в первой #2
Сравниваешь по-символьно, идёшь по символам первой строки. Нашёл совпадение первого символа второй строки с текущим символом в первой - сравниваешь второй символ второй строки со следующим в первой. Если не совпало, снова начинаешь сравнение с первого символа второй строки и текущего первой.
yleart
60 / 45 / 1
Регистрация: 07.10.2011
Сообщений: 139
22.10.2012, 23:10     Найти вторую строку в первой #3
Загуглите КМП или БМ поиски
Osmium
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 18
23.10.2012, 13:36  [ТС]     Найти вторую строку в первой #4
John Prick
Алгоритм я понял, но не могу понять как его реализовать (
John Prick
774 / 707 / 129
Регистрация: 27.07.2012
Сообщений: 2,026
Завершенные тесты: 3
23.10.2012, 14:12     Найти вторую строку в первой #5
Для char*
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const char * const str1 = "abcdefghjklmnopqrstuvwxyz";
const char * const str2 = "fgh";
bool success = false;
int index = -1;
for (int i = 0; (i < Len(str1)) && !success; ++i)
{
    int j = 0;
    for (j = 0; j < Len(str2); ++j)
    {
        if (str2[j] != str1[i + j])
            break;
    }
    if (j == Len(str2))
    {
        success = true;
        index = i;
     }
}
Это решение в лоб. Плюс надо всякие проверки добавить на невыход за пределы строк.
Можно это всё дело ускорить, сравнивая не тупо посимвольно, а например так: отступить от начала первой строки длину второй, проверить посл.символ второй строки и текущий, если не совпали - ещё отступить на длину второй строки. Если совпали - цикл сравнения с первого символа второй строки и соответствующего первой. С индексами там игра идёт.
Pure
228 / 49 / 2
Регистрация: 13.03.2012
Сообщений: 453
Записей в блоге: 7
23.10.2012, 14:24     Найти вторую строку в первой #6
а что если использовать стандарты)) без strstr?
Osmium
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 18
24.10.2012, 14:40  [ТС]     Найти вторую строку в первой #7
Эх, ничего я не понимаю. Помогите пожалуйста написать полную программу. Завтра сдавать, а у меня ничего не готово (
John Prick
774 / 707 / 129
Регистрация: 27.07.2012
Сообщений: 2,026
Завершенные тесты: 3
24.10.2012, 15:09     Найти вторую строку в первой #8
Цитата Сообщение от Osmium Посмотреть сообщение
Я написал эту программку, но с использованием стандартной функции strstr.
Ну это же вам удалось? Замените вызов strstr на код, приведённый выше.
Osmium
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 18
24.10.2012, 15:10  [ТС]     Найти вторую строку в первой #9
John Prick
С strstr все легко, а тут..не понимаю. Можете написать код пожалуйста?!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2012, 15:59     Найти вторую строку в первой
Еще ссылки по теме:

Найти наименьшее среди тех чисел в первой последовательности, которые не входят во вторую - C++
1. Даны 2 последовательности по 5 чисел в каждой.Найти наименьшее среди тех чисел в первой последовательности, которые не входят во вторую ...

Найти наименьшее среди тех чисел первой последовательности, которые не входят во вторую - C++
Может кто помочь с кодом для следующей задачи : Даны две последовательности по пять целых чисел в каждой. Найти наименьшее среди тех...

Копирование первой половины строки во вторую - C++
Написать программу копирования первой половины, введенной строки, в другую строку. Заранее спасибо.

В матрице найти строку с максимальной суммой элементов и поэлементно поменять ее с первой строкой - C++
ПОМОГИТЕ РЕШИТЬ ЗАДАЧКУ-----Написать программу на языке С++. В программе предусмотреть диалог, откуда будут вводится элементы исходной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
John Prick
774 / 707 / 129
Регистрация: 27.07.2012
Сообщений: 2,026
Завершенные тесты: 3
24.10.2012, 15:59     Найти вторую строку в первой #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
int MyStrStr(const char * const str1, const char * const str2)
{
    bool success = false;
    int index = -1;
    for (int i = 0; (str1[i] != 0) && !success; ++i)
    {
        int j = 0;
        for (j = 0; str2[i] != 0; ++j)
        {
            if (str2[j] != str1[i + j])
                break;
        }
        if (str2[j] == 0) // дошли до конца str
        {
            success = true;
            index = i;
         }
    }
    if (success)
        return index;
    return -1;
}
 
int main(void)
{
    const char * const str1 = "abcdefghjklmnopqrstuvwxyz";
    const char * const str2 = "fgh";
    int AllThatIWant = MyStrStr(str1,str2);
    return 0;
}
Добавлено через 55 секунд
Цитата Сообщение от Osmium Посмотреть сообщение
С strstr все легко, а тут..не понимаю.
Но вообще, думаю, что не в непонимании дело, а в лени.
Yandex
Объявления
24.10.2012, 15:59     Найти вторую строку в первой
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru