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

C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Panda91
0 / 0 / 0
Регистрация: 09.12.2009
Сообщений: 22
#1

Программа по работе со строками - C++

10.12.2009, 23:39. Просмотров 1252. Ответов 14

Помогите написать программу, которая выдает позицию самого правого вхождения строки t в строку s, или -1, если t не входит в s.
- написать с использованием функций библиотеки string.h
- написать работая со строками как с массивами

Помогите и если сможете то объясните мне как глупой студентке))))))
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
11.12.2009, 00:29     Программа по работе со строками #2
Гугли алгоритм Кнута Мориса Прата
Panda91
0 / 0 / 0
Регистрация: 09.12.2009
Сообщений: 22
11.12.2009, 00:43  [ТС]     Программа по работе со строками #3
А с самим кодом программы не поможите?
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
11.12.2009, 01:19     Программа по работе со строками #4
дело в том что я его сам еще не выучил, я только знаю что он пашет за О(n) и все..
Gravity
 Аватар для Gravity
556 / 550 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
11.12.2009, 01:58     Программа по работе со строками #5
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
31
#include <stdio.h>
#include <string.h>
 
#define MAXLEN 4096
 
int
strpos(char *s, char *t)
{
    char *p, *q;
 
    for(q = NULL, p = s; p = strstr(p, t); q = p, p++)
        ;
    return (q != NULL) ? (q - s) : -1;
}
 
int
main(void)
{
    char s[MAXLEN], t[MAXLEN];
    int ret;
    
    printf("Введите строку s: ");
    fgets(s, sizeof(s), stdin);
    printf("Введите строку t: ");
    fgets(t, sizeof(t), stdin);
 
    ret = strpos(s, t);
    (ret >= 0) ? printf("Строка t входит в строку s в позиции %d.\n", ret + 1) :
                 printf("Строка t не входит в строку s.\n");
    return 0;
}
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
11.12.2009, 07:54     Программа по работе со строками #6
Цитата Сообщение от Gravity Посмотреть сообщение
p = strstr(p, t)
это стандартная функция?
Gravity
 Аватар для Gravity
556 / 550 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
11.12.2009, 14:15     Программа по работе со строками #7
Цитата Сообщение от outoftime Посмотреть сообщение
это стандартная функция?
Разумеется.
Panda91
0 / 0 / 0
Регистрация: 09.12.2009
Сообщений: 22
11.12.2009, 21:42  [ТС]     Программа по работе со строками #8
А можете мне поподробнее объяснить код программы?
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
11.12.2009, 21:50     Программа по работе со строками #9
Вот
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
#include <iostream>
#include <string>
#include <vector>
 
using namespace std;
 
int kmp(string t, string s)
{
    string sn = t + '$' + s;
    int n = sn.length(),
        nt = t.length();
    vector <int> pi (n);
    for (int i = 1; i < n; ++i)
    {
        int k = pi[i-1];
        while (k > 0 && sn[i] != sn[k]) --k;
        if (sn[i] == sn[k]) ++k;
        pi[i] = k;
        if (k == nt) return i - 2*nt;
    }
    return -1;
}
 
int main()
{
    string s, t;
    cin >> t >> s;
    cout << ( kmp(t,s) ) << endl;
    return 0;
}
,
рабобочий КМП, только на си++
Panda91
0 / 0 / 0
Регистрация: 09.12.2009
Сообщений: 22
11.12.2009, 22:15  [ТС]     Программа по работе со строками #10
outoftime:
Выдаёт ошибку "насчет неожиданного окончания файла пока идет поиск предварительно скомпилированного заголовка." И еще говорится про "stdafx.h" спрашивается про ее использование... так же окно не задерживается на экране... когда я добавила getch() компилятор начинает ругаться...
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
11.12.2009, 23:15     Программа по работе со строками #11
Цитата Сообщение от Panda91 Посмотреть сообщение
когда я добавила getch() компилятор начинает ругаться...
C++
1
2
3
#include <iostream> // or <iostream.h>
//main
system("pause");
это си++ с использованием вектора с СТЛ-я, на чистом си++ не пойдет, я юзал вижуал студию в качестве компилятора.. попробуйте wxDevCpp он должен потянуть..
Panda91
0 / 0 / 0
Регистрация: 09.12.2009
Сообщений: 22
11.12.2009, 23:48  [ТС]     Программа по работе со строками #12
outoftime:
А вы не можете мне разъяснить код написанной программы? а то я как то не могу много понять...
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
12.12.2009, 00:30     Программа по работе со строками #13
он сногшибательно быстрый, это не проход за О(n^3). O(n+m) - его асимптотика, это алгоритм Кнута-Морриса-Пратта. Он детально описан на: http://e-maxx.ru/algo/prefix_function тут же примеры кода, правда нам его раз показывали, я только сейчас смог его накодить))
Panda91
0 / 0 / 0
Регистрация: 09.12.2009
Сообщений: 22
13.12.2009, 14:57  [ТС]     Программа по работе со строками #14
Цитата Сообщение от outoftime Посмотреть сообщение
C++
1
2
3
#include <iostream> // or <iostream.h>
//main
system("pause");
это си++ с использованием вектора с СТЛ-я, на чистом си++ не пойдет, я юзал вижуал студию в качестве компилятора..
Я тоже использовала Visual Studio в качестве компилятора... выдавал ошибки... fatal error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source?
что такое С++ с использованием вектора с СТЛ-я?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2009, 15:54     Программа по работе со строками
Еще ссылки по теме:

Ошибки при работе со строками C++
Баг при работе с строками C++
C++ Указатели при работе со строками char*
C++ Ошибка при работе со строками
Странное поведение при работе со строками: почему программа выводит 8, если в input "МАКС"? C++

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

Или воспользуйтесь поиском по форуму:
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
13.12.2009, 15:54     Программа по работе со строками #15
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
31
#include <iostream>
#include <string>
#include <vector>
 
using namespace std;
 
int kmp(string t, string s)
{
    string sn = t + '$' + s;
    int n = sn.size(),
        nt = t.size();
    vector <int> pi (n);
    for (int i = 1; i < n; ++i)
    {
        int k = pi[i-1];
        while (k > 0 && sn[i] != sn[k]) --k;
        if (sn[i] == sn[k]) ++k;
        pi[i] = k;
        if (k == nt) return i - 2*nt;
    }
    return -1;
}
 
int main()
{
    string s, t;
    cin >> t >> s;
    cout << (kmp(t,s)) << endl;
    system("pause");
    return 0;    
}
Добавлено через 1 минуту
если увидишь незнакомую функцию сразу делай следующе:
1 - вводишь в гугл: <функция> c++ preferences
Yandex
Объявления
13.12.2009, 15:54     Программа по работе со строками
Ответ Создать тему
Опции темы

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