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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Broke777
1 / 1 / 0
Регистрация: 19.09.2013
Сообщений: 43
#1

Объясните строчку в программе - C++

31.12.2013, 09:18. Просмотров 1098. Ответов 34
Метки нет (Все метки)

Всем привет.

Ребята, нужна ваша помощь.

Подскажите, пожалуйста, что выполняет следующая строка в программе:

C++
1
2
3
4
5
for(i=0;i<s.length();i++)
{ 
    for(x=0;x<=255;x++)
    {
        if(mas[x]!=s[i]) z=1; else {z=0;break;}} // вот эта;
зачем нами введенный массив сравнивается с массивом из 256 символов и при том, если они не равны, то программа продолжает работу ><

Никак не могу разобраться...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.12.2013, 09:18     Объясните строчку в программе
Посмотрите здесь:

Объясните строчку - C++
#include&lt;iostream&gt; #include&lt;fstream&gt; #include&lt;locale.h&gt; #include&lt;iomanip&gt; #include &lt;cstdlib&gt; using namespace std; struct...

Объясните строчку кода - C++
a = b &gt;&gt; c; наперед спасибо!

Объясните строчку из стандарта - C++
a cast expression to rvalue reference to function type, such as static_cast&lt;void (&amp;&amp;)(int)&gt;(x); &lt;void (&amp;&amp;)(int)&gt; как это понять? И...

Объясните строчку в коде - C++
#include &lt;iostream&gt; using namespace std; class Node{ public: int data; Node * next; Node *prev; ...

объясните, пожалуйста, полностью строчку с циклом - C++
#include &lt;stdio.h&gt; int main () { int a,b; scanf(&quot;%i&quot;,&amp;b); for (a=0;a&lt;=b-1; a++) { printf(&quot;Privet &quot;); } ...

Объясните, как понять строчку в коде - C++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt; #include &lt;locale.h&gt; #define M 1000 int versh, ves, nov_ves,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pavlov_Mikhail
0 / 0 / 0
Регистрация: 31.12.2013
Сообщений: 20
31.12.2013, 09:22     Объясните строчку в программе #2
if(mas[x]!=s[i]) z=1; else {z=0;break;}} - это значит что если элемент массива mas[x] не равен элементу массиву s[i] то переменной z присвоить значение 1, иначе переменной z присвоить 0, и остановить цикл
Broke777
1 / 1 / 0
Регистрация: 19.09.2013
Сообщений: 43
31.12.2013, 09:25  [ТС]     Объясните строчку в программе #3
Цитата Сообщение от Pavlov_Mikhail Посмотреть сообщение
if(mas[x]!=s[i]) z=1; else {z=0;break;}} - это значит что если элемент массива mas[x] не равен элементу массиву s[i] то переменной z присвоить значение 1, иначе переменной z присвоить 0, и остановить цикл
Это я понимаю) я не могу разобраться с целью выполнения этой строчки

Добавлено через 1 минуту
Код выкладывать не буду из некоторых соображений, но если z=1, то идет подсчет символов s[i].
Pavlov_Mikhail
0 / 0 / 0
Регистрация: 31.12.2013
Сообщений: 20
31.12.2013, 09:32     Объясните строчку в программе #4
если этот код работает правильно, то вероятно там дальше идем присвоение какой-то переменной res z. например res+=z;
MicM
821 / 488 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
31.12.2013, 09:33     Объясните строчку в программе #5
Цитата Сообщение от Broke777 Посмотреть сообщение
я не могу разобраться с целью выполнения этой строчки
Так это и есть цель:
Цитата Сообщение от Pavlov_Mikhail Посмотреть сообщение
то если элемент массива mas[x] не равен элементу массиву s[i] то переменной z присвоить значение 1, иначе переменной z присвоить 0, и остановить цикл
Здесь приведен лишь отрывок из программы, так что сказать конкретнее для чего это строка нужна, вряд ли окажется возможным, можно только предполагать
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,183
Завершенные тесты: 1
31.12.2013, 11:17     Объясните строчку в программе #6
У меня такая идея.
Цикл по x - это поиск символа строки s[i] в кодовой таблице mas.
Если символ найден, то z делается равным нулю и происходит выход из
цикла поиска. x будет равно номеру этого символа в кодовой таблице.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6442 / 3081 / 306
Регистрация: 04.12.2011
Сообщений: 8,486
Записей в блоге: 4
01.01.2014, 15:02     Объясните строчку в программе #7
Broke777, Вы решили, что типы для индексируемых сущностей s и mas неважны. А ведь при перегрузке операторов сравнения и каких-то определениях приведения типов, конструкторами ли, операторами прямого приведения ли, может оказаться, что придётся сравнивать так, как в приведенном коде. Впрочем, возможно я и неправ.
Ваш код сравнивает каждый элемент mass с s и в случае несовпадения прекращает работу устанавливаят флаг z в единицу . Если mass и s, например, имеют тип int, то логично было бы:
1) установить z=0;
2) выяснить что меньше s.length() или магическое 256)
3) сравнить mass[0] и s[0]
если совпали то сначала
4) проверяем совпадают ли значения самого короткого из массивов
если совпадают
5) проверяем совпадают ли значения более длинного

При любом нет начиная с 3-го шага z=1 с прекращением дальнейших проверок (например простым вложением if)).
С Новым Годом!

Добавлено через 23 часа 15 минут
Цитата Сообщение от IGPIGP Посмотреть сообщение
5) проверяем совпадают ли значения более длинного
На глубину размера короткого массива, конечно, так как дальше уже не нужно.
Broke777
1 / 1 / 0
Регистрация: 19.09.2013
Сообщений: 43
01.01.2014, 23:16  [ТС]     Объясните строчку в программе #8
Всем спасибо, есть еще один вопросик, смотрите
C++
1
2
3
4
5
6
7
8
9
10
11
12
for(i=0;i<s.length();i++)
{ 
    for(x=0;x<=255;x++)
    {
                if(mas[x]!=s[i]) z=1; else {z=0;break;}}
    if((s[i]!=' ')& (s[i]!= '\n') & (z==1)){    
        k=0;
        for(j=0;j<s.length();j++)
        {
            if((s[i]==s[j])){k++;}
        }
itoa (k, string1, 10);
Разобраться пошагово:

Выполняем поиск символа из строки в таблице mas[x]. Если символ найден, то z=0 -> выходим из цикла.
Если равен z=1, т.е. символ не найден, то к = 0. Тут вопрос, как можно упростить это? Зачем нам каждый символ таблицы искать в нашей строке, когда можно наоборот сделать >.< Или я не совсем понял.
След. строка - проверка: если символ равен пробелу и z=1 (т.е. его просто нет?!) , то знач. к = 0.

А что конкретно мы делаем в цикле, когда вводим j. Ищем s[i] символ в нашей строке и с каждым повторяющимся значением к делает один шаг. а К записывается в какой-то непонятной для меня кодировке и после переводится с помощью itoa в численное значение?
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6442 / 3081 / 306
Регистрация: 04.12.2011
Сообщений: 8,486
Записей в блоге: 4
01.01.2014, 23:51     Объясните строчку в программе #9
Broke777, прошу прощенья, что-то условие в Вашем вопросе у меня в глазах перевернулось. Написал я черт-те что. Ветвь else не увидел. Вообще, лучше для читабельности разделять ветви построчно при форматировании.
Цитата Сообщение от Broke777 Посмотреть сообщение
сделать >.< Или я не совсем понял.
если таблица mas непрерывна то можно бы. Для латиницы в ASCII, например, так и есть, но если это русские символы там же, то с 'ё' 'Ё' нужно бы разобраться отдельно. Остальные коды составляют непрерывную последовательность. То есть вообще говоря по-символьно и нужно сравнивать, если таблица разрывна или наперёд неизвестна.
Я вот не понял, зачем поразрядное & использовать?
Broke777
1 / 1 / 0
Регистрация: 19.09.2013
Сообщений: 43
02.01.2014, 13:56  [ТС]     Объясните строчку в программе #10
vverh
Ev_Hyper
Заблокирован
02.01.2014, 14:48     Объясните строчку в программе #11
Broke777, а у вас что еще вопросы остались?
Broke777
1 / 1 / 0
Регистрация: 19.09.2013
Сообщений: 43
02.01.2014, 20:06  [ТС]     Объясните строчку в программе #12
пост выше
Ev_Hyper
Заблокирован
02.01.2014, 23:17     Объясните строчку в программе #13
Broke777, а разве вам IGPIGP не все объяснил?
Broke777
1 / 1 / 0
Регистрация: 19.09.2013
Сообщений: 43
02.01.2014, 23:58  [ТС]     Объясните строчку в программе #14
Цитата Сообщение от Broke777 Посмотреть сообщение
Всем спасибо, есть еще один вопросик, смотрите

А что конкретно мы делаем в цикле, когда вводим j. Ищем s[i] символ в нашей строке и с каждым повторяющимся значением к делает один шаг.
///
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.01.2014, 00:35     Объясните строчку в программе
Еще ссылки по теме:

Объясните нубу строчку кода с Vector - C++
vector&lt;vector&lt;int&gt; &gt; dp( W + 1, vector&lt;int&gt;( n+1, 0 ) ); Что она делает? Создает вектор состоящий из векторов типа int и...

Объясните, пожалуйста, строчку var %= 1000 - C++
Тут делов на две секунды, ибо я новичок, и вопросы априори у меня глупые. есть задачка для чайников. Напишите программу, которая...

Опишите каждую строчку в программе,что она означает - C++
#include &lt;iostream.h&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; class B{ int a; public: B() { }; B(int x) { a=x; } void...

Объясните что не так с указателем в программе - C++
Функция defStart возвращает указатель на int . В main другой указатель присваивает значение(адрес) возвращенного указателя. Затем в цикле...


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

Или воспользуйтесь поиском по форуму:
Ev_Hyper
Заблокирован
03.01.2014, 00:35     Объясните строчку в программе #15
Цитата Сообщение от Broke777 Посмотреть сообщение
А что конкретно мы делаем в цикле, когда вводим j. Ищем s[i] символ в нашей строке и с каждым повторяющимся значением к делает один шаг. а К записывается в какой-то непонятной для меня кодировке и после переводится с помощью itoa в численное значение?
вам же уже сказали выкладывайте код полностью. в противном случае неясно,что автор хотел сделать этой строчкой.
Возможно нужно найти число повторений.
Yandex
Объявления
03.01.2014, 00:35     Объясните строчку в программе
Ответ Создать тему
Опции темы

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