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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
flips
0 / 0 / 0
Регистрация: 21.03.2011
Сообщений: 49
#1

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

21.03.2011, 16:27. Просмотров 514. Ответов 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;
             }
         }
      .... 
     }
Если можно, то по детальнее объяснить и с примером желательно.
Спасибо за внимание.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.03.2011, 16:27     Объясните пожалуйста код и ход работы программы на С++
Посмотрите здесь:

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

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

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

Объясните код программы для работы с текстовыми файлами - C++
Вот, собственно говоря, сам код: #include&gt; &quot;stdafx.h&quot; #include &lt;stdio.h&gt; void main(int argc,char *argv) { FILE *in; int ch; ...

Программа которая выводит два наибольших числа из десяти введенных. Пожалуйста объясните суть работы программы - C++
#include &lt;iostream&gt; using namespace std; int main() { int i; float number, largest, largest2;

Объясните, пожалуйста, принцип работы. - C++
Есть прога, считает сумму ряда, но ряд - знакочередующийся (-1,1,-1,...). При подсчете программа заканчивае работу на 1023 члене. Но чем...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LaГushan
124 / 124 / 14
Регистрация: 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;
flips
0 / 0 / 0
Регистрация: 21.03.2011
Сообщений: 49
21.03.2011, 17:10  [ТС]     Объясните пожалуйста код и ход работы программы на С++ #3
Спасибо за помощь.
Забыл написать, это программа ищёт начало вхождения подстроки в строку.
А конкретно эту строку, почему нужно сравнивать именно с такой позиции символ из исходной строки?
C++
1
if (str[i+j]!=fsubstr[j]){
slice
34 / 77 / 4
Регистрация: 04.11.2010
Сообщений: 249
21.03.2011, 17:16     Объясните пожалуйста код и ход работы программы на С++ #4
Цитата Сообщение от flips Посмотреть сообщение
почему нужно сравнивать именно с такой позиции символ из исходной строки?
потому что если сравнивать другие позиции, то программа будет работать неправильно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2011, 22:15     Объясните пожалуйста код и ход работы программы на С++
Еще ссылки по теме:

Объясните пожалуйста принцип работы указателей - C++
#include &lt;iostream&gt; using namespace std; int main() { int *p,num; p = &amp;num; *p=100;

Объясните, пожалуйста, код - C++
bool userAgeIs16 = age == 16; if( userAgeIs16 ) { Console.WriteLine(\&quot;В этом возрасте уже можно водить машину!\&quot;); } ...

объясните пожалуйста код - C++
объясните пожалуйста код, желательно каждую строчку пояснить #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;sstream&gt; #include...

Объясните пожалуйста код - C++
#include &lt;iostream&gt; template &lt;typename T&gt; struct NameOf {}; #define DEF_TYPENAME(type) template &lt;&gt; \ struct NameOf&lt;type&gt; {\ ...


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

Или воспользуйтесь поиском по форуму:
flips
0 / 0 / 0
Регистрация: 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 минуты
проблема решена
Yandex
Объявления
21.03.2011, 22:15     Объясните пожалуйста код и ход работы программы на С++
Ответ Создать тему
Опции темы

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