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

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

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

C++ Вторую строку нужно скопировать в конец первой
Pascal -> С++ (определить вторую цифру дробной части частного от деления суммы первой и третьей цифр трехзначного числа на вторую цифру этого числа) C++
C++ Найти наименьшее среди чисел первой последовательности, не входящих во вторую
C++ Найти наименьшее среди тех чисел в первой последовательности, которые не входят во вторую
Найти наименьшее среди тех чисел первой последовательности, которые не входят во вторую C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
22.10.2012, 19:48     Найти вторую строку в первой #2
Сравниваешь по-символьно, идёшь по символам первой строки. Нашёл совпадение первого символа второй строки с текущим символом в первой - сравниваешь второй символ второй строки со следующим в первой. Если не совпало, снова начинаешь сравнение с первого символа второй строки и текущего первой.
yleart
 Аватар для 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
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 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
 Аватар для 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
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 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++
вывод числа вхождений каждого из символов первой строки во вторую строку C++
Ввести строку, создать вторую строку в два раза больше, в которую записать симболы первой строки C++

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

Или воспользуйтесь поиском по форуму:
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 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     Найти вторую строку в первой
Ответ Создать тему
Опции темы

Текущее время: 19:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru