0 / 0 / 1
Регистрация: 21.03.2011
Сообщений: 49
1

Объясните пожалуйста код и ход работы программы на С++

21.03.2011, 16:27. Показов 856. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот код фрагмента программы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
     int i;
     int l=strlen(str);
     int k=strlen(fsubstr);
     bool fl=true;
     for (i=0;i<l-k;i++){
         int j;
         for (j=0;j<k;j++){
             if (str[i+j]!=fsubstr[j]){
                 fl=false;
                 break;
             }
         }
         if (fl){
             int p=i+1;
             cout<<"String begining from "<<p<<endl;
             break;
         }
     }
     if (!fl)
         cout<<"String not found"<<endl;
     getch();
     return 0;
 }
Объясните пожалуйста ход работы программы в этом цикле:
C++
1
2
3
4
5
6
7
8
9
10
     for (i=0;i<l-k;i++){
         int j;
         for (j=0;j<k;j++){
             if (str[i+j]!=fsubstr[j]){
                 fl=false;
                 break;
             }
         }
      .... 
     }
Если можно, то по детальнее объяснить и с примером желательно.
Спасибо за внимание.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.03.2011, 16:27
Ответы с готовыми решениями:

Объясните пожалуйста ход работы программы
Дан код #include&lt;iostream&gt; #include&lt;windows.h&gt; using namespace std; HANDLE console =...

Объясните пожалуйста суть работы программы
Тут мне ребята помоги с задачей, но не объяснили суть работы задачи. var i,n:integer; {функция...

Объясните пожалуйста результат работы программы
#include &lt;iostream&gt; using namespace std; int main() { short int i; short unsigned...

Объясните код программы пожалуйста
using System; namespace Mansurov { class MainClass { internal static...

4
126 / 126 / 42
Регистрация: 12.03.2011
Сообщений: 227
21.03.2011, 16:57 2
Мне кажется, что код должен определять позицию начала подстроки в строке, но на деле, определяется тога, когда слово стоит в самом начале. Но может быть так и было запланировано
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int i; //объявляем переменную i
     int l=strlen(str); //находим длину строки str
     int k=strlen(fsubstr);//находим длину строки fsubstr
     bool fl=true; //обращаем перемунню f1 в истину
     for (i=0;i<l-k;i++){ //вычитаем длину строки fsubstr из str и крутим цикл пока i < l-k
         int j; //объявляем перемунную j
         for (j=0;j<k;j++){//в этом цикле сравниваем символы в строках
             if (str[i+j]!=fsubstr[j]){ //если они не равны, то останавливаем цикл
                 fl=false;
                 break;
             }
         }
         if (fl){ //если все символы совпали, то выводим значение с которой начинается подстрока
             int p=i+1;
             cout<<"String begining from "<<p<<endl;
             break;
         }
     }
     if (!fl) //а если нет, то нет
         cout<<"String not found"<<endl;
     getch(); //ожидание нажатия клавиши
     return 0;
1
0 / 0 / 1
Регистрация: 21.03.2011
Сообщений: 49
21.03.2011, 17:10  [ТС] 3
Спасибо за помощь.
Забыл написать, это программа ищёт начало вхождения подстроки в строку.
А конкретно эту строку, почему нужно сравнивать именно с такой позиции символ из исходной строки?
C++
1
if (str[i+j]!=fsubstr[j]){
0
79 / 78 / 6
Регистрация: 04.11.2010
Сообщений: 249
21.03.2011, 17:16 4
Цитата Сообщение от flips Посмотреть сообщение
почему нужно сравнивать именно с такой позиции символ из исходной строки?
потому что если сравнивать другие позиции, то программа будет работать неправильно
2
0 / 0 / 1
Регистрация: 21.03.2011
Сообщений: 49
21.03.2011, 22:15  [ТС] 5
Кажется, понял, почему именно такая запись.
С первым символом подстроки сравниваются символы строки, если нашли первый символ, то дальше идёт сравнение второго символа подстроки с соотвествующим и так далее.
Моё понимание записи правильное?

Добавлено через 2 часа 19 минут
Товарищи-форумчане, помогите разобраться, программа работает неправильно. Так как в QT Creator'е не могу продебажить, плохо работает, то прошу вашей помощи.
Вот сам код
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
#include<stdio.h>
#include<iostream>
#include<conio.h>
#include<string.h>
using namespace std;
 
#define STR_LENGTH 30
 
int main() {
     char str[STR_LENGTH];
     char fsubstr[STR_LENGTH];
     cout<<"Enter the string\n";
     cin.getline(str, STR_LENGTH-1);
     cout<<"Enter substring for searching"<<endl;
     cin.getline(fsubstr, STR_LENGTH-1);
     int i;
     int l=strlen(str);
     int k=strlen(fsubstr);
     bool fl=true;
     for (i=0;i<l-k;i++){
         int j;
         for (j=0;j<k;j++){
             if (str[i+j]!=fsubstr[j]){
                 fl=false;
                 break;
             }
         }
         if (fl){
             int p=i+1;
             cout<<"String begining from "<<p<<endl;
             break;
         }
     }
     if (!fl)
         cout<<"String not found"<<endl;
     getch();
     return 0;
 }
Добавлено через 1 час 50 минут
подниму тему

Добавлено через 24 минуты
проблема решена
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.03.2011, 22:15
Помогаю со студенческими работами здесь

Объясните пожалуйста код программы си
#include &lt;conio.h&gt; int main() { int N,M; printf(&quot;chislitel: &quot;); scanf(&quot;%d&quot;,&amp;M);...

Объясните код программы!!! Пожалуйста!!
Непонятности возникают начиная с кода ассемблера. Нашел в интернете инфу на все команды, но не...

Объясните код программы, пожалуйста
Добрый вечер, помогите пожалуйста разобраться с кодом программы. почти вся работа расписана...

Объясните пожалуйста код программы
#include &lt;stdio.h&gt; int main() { int n, result = 1; printf(&quot;n=&quot;); if...

Объясните, пожалуйста, в каком порядке Java-машина читает код и логику работы
Объясните, пожалуйста, в каком порядке Java-машина читает код и логику работы. Для меня выглядит...

Объясните код программы работы с двумерными массивами
#include &lt;time.h&gt; #include &lt;stdlib.h&gt; #include &lt;iostream&gt; #include &lt;cmath&gt; #include &lt;iomanip&gt;...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru