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

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

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

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

21.03.2011, 16:27. Просмотров 489. Ответов 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++ Объясните пожалуйста ход работы программы
C++ Объясните, пожалуйста, принцип работы.
Объясните код пожалуйста C++
объясните пожалуйста код C++
C++ Объясните, пожалуйста, код
Программа которая выводит два наибольших числа из десяти введенных. Пожалуйста объясните суть работы программы C++
Объясните код программы для работы с текстовыми файлами C++
Объясните пожалуйста код C++
C++ Объясните код программы работы с двумерными массивами
Объясните пожалуйста результат работы программы C++
C++ Объясните пожалуйста принцип работы указателей
Объясните пожалуйста код C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
32 / 75 / 4
Регистрация: 04.11.2010
Сообщений: 249
21.03.2011, 17:16     Объясните пожалуйста код и ход работы программы на С++ #4
Цитата Сообщение от flips Посмотреть сообщение
почему нужно сравнивать именно с такой позиции символ из исходной строки?
потому что если сравнивать другие позиции, то программа будет работать неправильно
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     Объясните пожалуйста код и ход работы программы на С++
Ответ Создать тему
Опции темы

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