Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

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

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

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

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

Помогите и если сможете то объясните мне как глупой студентке))))))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.12.2009, 23:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программа по работе со строками (C++):

Ошибка при работе со строками - поиск и удаление в строке - C++ Builder
void __fastcall TForm1::Button2Click(TObject *Sender) { Memo1->Clear(); String t; t = Edit1->Text; int d=0, s; const int kol...

Переход с Builder6 на XE4, проблемы при работе со строками - C++ Builder
Извиняюсь за такое название темы, все блочило что не писал Проблема такая , на билдере 6 мой код работал без всяких проблем, как...

Программа виснет при работе с com-портом - C++ Builder
Та же проблема, в программе задействовано 2 com порта, со вторым постоянные неприятности! Ни каких эксепшенов просто зависает программа!...

Странное поведение при работе со строками: почему программа выводит 8, если в input "МАКС"? - C++
Почему программа выводит 8, если в input: "МАКС"? #include <iostream> #include <string> #include <string.h> using namespace...

выпросы по работе со строками - C++
никак не могу понять, в чем ошибка. пытаюсь сравнить строки: отсутствует оператор "==", соответствующий этим операндам; Ошибка 1 error...

Ошибки в работе со строками - C++
Дано два символьных файла f и g. Проверить их на совпадение символов. Если отличаются тогда вывести эти символы. Моя программа задачу...

14
outoftime
║XLR8║
511 / 433 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
11.12.2009, 00:29 #2
Гугли алгоритм Кнута Мориса Прата
0
Panda91
0 / 0 / 0
Регистрация: 09.12.2009
Сообщений: 22
11.12.2009, 00:43  [ТС] #3
А с самим кодом программы не поможите?
0
outoftime
║XLR8║
511 / 433 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
11.12.2009, 01:19 #4
дело в том что я его сам еще не выучил, я только знаю что он пашет за О(n) и все..
0
Gravity
564 / 558 / 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;
}
2
outoftime
║XLR8║
511 / 433 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
11.12.2009, 07:54 #6
Цитата Сообщение от Gravity Посмотреть сообщение
p = strstr(p, t)
это стандартная функция?
0
Gravity
564 / 558 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
11.12.2009, 14:15 #7
Цитата Сообщение от outoftime Посмотреть сообщение
это стандартная функция?
Разумеется.
0
Panda91
0 / 0 / 0
Регистрация: 09.12.2009
Сообщений: 22
11.12.2009, 21:42  [ТС] #8
А можете мне поподробнее объяснить код программы?
0
outoftime
║XLR8║
511 / 433 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
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;
}
,
рабобочий КМП, только на си++
0
Panda91
0 / 0 / 0
Регистрация: 09.12.2009
Сообщений: 22
11.12.2009, 22:15  [ТС] #10
outoftime:
Выдаёт ошибку "насчет неожиданного окончания файла пока идет поиск предварительно скомпилированного заголовка." И еще говорится про "stdafx.h" спрашивается про ее использование... так же окно не задерживается на экране... когда я добавила getch() компилятор начинает ругаться...
0
outoftime
║XLR8║
511 / 433 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
11.12.2009, 23:15 #11
Цитата Сообщение от Panda91 Посмотреть сообщение
когда я добавила getch() компилятор начинает ругаться...
C++
1
2
3
#include <iostream> // or <iostream.h>
//main
system("pause");
это си++ с использованием вектора с СТЛ-я, на чистом си++ не пойдет, я юзал вижуал студию в качестве компилятора.. попробуйте wxDevCpp он должен потянуть..
0
Panda91
0 / 0 / 0
Регистрация: 09.12.2009
Сообщений: 22
11.12.2009, 23:48  [ТС] #12
outoftime:
А вы не можете мне разъяснить код написанной программы? а то я как то не могу много понять...
0
outoftime
║XLR8║
511 / 433 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
12.12.2009, 00:30 #13
он сногшибательно быстрый, это не проход за О(n^3). O(n+m) - его асимптотика, это алгоритм Кнута-Морриса-Пратта. Он детально описан на: http://e-maxx.ru/algo/prefix_function тут же примеры кода, правда нам его раз показывали, я только сейчас смог его накодить))
0
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?
что такое С++ с использованием вектора с СТЛ-я?
0
outoftime
║XLR8║
511 / 433 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
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
0
13.12.2009, 15:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2009, 15:54
Привет! Вот еще темы с ответами:

Исправление ошибки в работе со строками - C++
Пожалуйста, подправьте программу. На borland 5 версии все работает ок. начал переписывать на Borland 3.1 пошли ошибка. Исправлял не знаю...

Ошибка при работе со строками - C++
Доброго времени суток! Казалось бы, простая проблема, но разобраться пока что никак не удаётся. Прошу помочь. Итак, нужно ввести из...

Ошибки при работе со строками - C++
Доброго времени суток! Есть такой код #include &lt;stdio.h&gt; #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int main...

Исправление ошибки в работе со строками - C++
Каждый раз в моём коде со строками выдает эту ошибку. Иногда, если проигнорировать её, всё запустится, а иногда - нет. В чём проблема? ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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