Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
101 / 102 / 43
Регистрация: 06.03.2012
Сообщений: 478

Поиск подстроки в строке

18.12.2013, 18:54. Показов 2108. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вообщем,не знаю почему в программе не работает считывание с файла,если в консоли всё ищет корректно,то при чтении из файла,как я понимаю не определяет почему то строку,как исправить?
И ещё как можно сделать,у меня в файле 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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include "stdafx.h"
#include <cstring>
#include <iostream>
#include <fstream>
#include <clocale>
#include <locale>
#include <windows.h>
 
using namespace std;
 
int KMPSearch(char *string, char *substring)    { //в качестве параметров в функцию передается строка и субстрока
 
  int  sl, ssl,count;
  int res = -1;
 
  sl = strlen(string);                                            //присваивается длина строки
    ssl = strlen(substring);                                      //присваивается длина субстроки
  
  if ( sl == 0 )                                                    //проверка строки
    cout << "Неверно задана строка\n"; 
  else if ( ssl == 0 )                                            //проверка субстроки
    cout << "Неверно задана подстрока\n"; 
  else {                                                            //Если все нормально - поехали
    int  i, j = 0, k = -1;
    int  *d;
    d = new int[4000];                                         //создали динамический одномерный массив
    d[0] = -1;                                                    //первый элемент делаем равным -1
    while ( j < ssl - 1 ) {                                      //пока  j < кол-ва эл-тов строки
      while ( k >= 0 && substring[j] != substring[k] ) /*пока k больше или равно 0 и j-тый элемент субстроки не равен
                                                                     k-тому присваиваем k k-тый элемент динамического массива*/
        k = d[k];                                                 
      j++;                                                         //увеличиваем j
      k++;
      if ( substring[j] == substring[k] )                   //если j-ый элемент субстроки равен k-тому
        d[j] = d[k];                                             //присваиваем j-тому элементу динамического массива k-тый
      else                                                         //иначе
        d[j] = k;                                                 //присваиваем k
    }
 
    i = 0;
    j = 0;                                                         //обнулили i, j
    while ( j < ssl && i < sl ){                               //пока j < длины субстроки и i < длины строки
      while ( j >= 0 && string[i] != substring[j] )       // пока j >= 0 и i-ый элемент субстроки не равен j-ому
        j = d[j];                                                  //j присваивается j-ый элемент динамического массива
      i++;
      j++;                                                         //увеличиваем i и j
    }
    
    delete [] d;                                                 //удаляем динам. массив                                                
    res =  j == ssl ? i - ssl : -1;                           // результатом будет i-ssl если j = ssl и -1 в противном случае
  }
  return res;
 
 
 
}
 
int _tmain()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251 );
 
    //Чтение из файла
    /*char s[4000] = {""};
    char q[256];
 
    ifstream filestr("Kniga1.txt");
    
     while (!filestr.eof()) {
        filestr.getline (s,4000);
            cout<<s<<endl;
     }
 
     filestr.close();
 
     ifstream SearchStr("Podstroka.txt");
 
      while (!SearchStr.eof())  {
        SearchStr.getline(q,256);
            cout<<q<<endl;
     }
 
      SearchStr.close();*/
 
    const int n = 10;
 
    srand((unsigned)time(NULL));
 
    int k, cnt = 0;
    char s[] = "boys and girls";
    char q[256];
 
    cout<<s<<endl<<endl;
 
    cout << "Введите строку для поиска:\n"; 
    cin.getline(q,256);
 
    //Кол-во вхождений
    for(int i = 0; i < strlen(s); ++i)
    {
        char tmp[500] = "";
        k = 0;
        if(s[i] == q[0])
        {
            for(int j = i; j <= strlen(q); ++i)
                tmp[k++] = s[j];
 
            if(strcmp(q, tmp))
                ++cnt;
                
            i += strlen(q) - 1;
        }
    }
 
    cout<<cnt<<endl;
 
    int a;
    a = KMPSearch(s,q);
    if(a == -1)
        cout << "net stroki\n\n";
    else
        cout << "Starting with the index " << a << " line in the text" << endl<<endl;
    
    system ("pause");
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.12.2013, 18:54
Ответы с готовыми решениями:

поиск подстроки в строке
Всем доброго времени суток! Дано: две строки типа string, к примеру str1 = &quot;HeLLo&quot; и str2 = &quot;hell&quot; Вопрос: как найти из str1...

Поиск подстроки в строке
Добрый день всем! Ребята помогите решить такую задачу. Мне нужно в строке char *text = &quot;Help me jax111mackey&quot; получить строку 111...

Поиск подстроки в строке
Найти множество всех слов, которые встречаются в каждом из 2 заданных предложений.

4
188 / 187 / 46
Регистрация: 24.03.2011
Сообщений: 670
18.12.2013, 18:59
Цитата Сообщение от faLek Посмотреть сообщение
Как узнать время потраченное на поиск?
Последний пост в Использование inline функций
0
101 / 102 / 43
Регистрация: 06.03.2012
Сообщений: 478
18.12.2013, 19:18  [ТС]
monolit, спасибо,но с этим разобрался,вот 2 других вопроса было бы неплохо ,если бы подсказали..
0
188 / 187 / 46
Регистрация: 24.03.2011
Сообщений: 670
18.12.2013, 19:27
Цитата Сообщение от faLek Посмотреть сообщение
И ещё как можно сделать,у меня в файле 10 искомых подстрок,как поочереди их искать?
туманный вопрос какой-то...
Цитата Сообщение от faLek Посмотреть сообщение
не работает считывание с файла
Что именно не работает?
0
101 / 102 / 43
Регистрация: 06.03.2012
Сообщений: 478
18.12.2013, 19:51  [ТС]
monolit, например в файле есть 10 слов,как их по очереди прогнать по всему тексту.Я хочу считать с файла мой текст,по которому я ищу так же считанную с файла подстроку,но поиск не работает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.12.2013, 19:51
Помогаю со студенческими работами здесь

Поиск подстроки в строке
Здравствуйте. Очень нужна программа поиска подстроки в строке. Действительно оч нужна. точная формулировка задачи: Написать...

Поиск подстроки в строке
Доброго времени суток! Столкнулся с такой задачей. Вводим 10 слов, далее вводим приставку (начало слова). В итоге программа должна показать...

Поиск подстроки в строке
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;iostream&gt; using namespace std; int GetLength(char* string) { int i; int...

Поиск подстроки в строке
Добрый вечер. Помогите пожалуйста с заданием, нужно срочно его сделать. Сам текст: даны 2 массива (один большой, другой маленький), нужно...

Поиск подстроки в строке
Как в С++ осуществляется поиск подстроки в строке???


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru