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

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

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

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

31.12.2013, 09:18. Просмотров 1082. Ответов 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 символов и при том, если они не равны, то программа продолжает работу ><

Никак не могу разобраться...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Модератор
Эксперт С++
6248 / 5851 / 1891
Регистрация: 18.12.2011
Сообщений: 14,992
Завершенные тесты: 1
31.12.2013, 11:17     Объясните строчку в программе #6
У меня такая идея.
Цикл по x - это поиск символа строки s[i] в кодовой таблице mas.
Если символ найден, то z делается равным нулю и происходит выход из
цикла поиска. x будет равно номеру этого символа в кодовой таблице.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6411 / 3050 / 300
Регистрация: 04.12.2011
Сообщений: 8,247
Записей в блоге: 3
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
Комп_Оратор)
Эксперт по математике/физике
6411 / 3050 / 300
Регистрация: 04.12.2011
Сообщений: 8,247
Записей в блоге: 3
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] символ в нашей строке и с каждым повторяющимся значением к делает один шаг.
///
Ev_Hyper
Заблокирован
03.01.2014, 00:35     Объясните строчку в программе #15
Цитата Сообщение от Broke777 Посмотреть сообщение
А что конкретно мы делаем в цикле, когда вводим j. Ищем s[i] символ в нашей строке и с каждым повторяющимся значением к делает один шаг. а К записывается в какой-то непонятной для меня кодировке и после переводится с помощью itoa в численное значение?
вам же уже сказали выкладывайте код полностью. в противном случае неясно,что автор хотел сделать этой строчкой.
Возможно нужно найти число повторений.
Broke777
1 / 1 / 0
Регистрация: 19.09.2013
Сообщений: 43
03.01.2014, 09:10  [ТС]     Объясните строчку в программе #16
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
void main(){
setlocale( LC_CTYPE,"Russian" );
char c;
char string1[20];
char mas[255];//массив встречающихся символов
string s,str;
int i=0,k=1, j=0,t=0,z,x=0;
FILE*f,*f1;
f=fopen("input.txt","r");
f1=fopen("output.txt","w");
 
while((c=fgetc(f))!=EOF)
{
    s=s+c;
}
cout<<"Исходный текст:\n"<<s<<"\n";
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); //переводим целое число в символьную строку
int p=0;
fputc(s[i],f1);
cout<<"\nСимвол "<<s[i];
fputc(' ',f1); 
while(string1[p]!='\0'){ fputc(string1[p],f1); p++;}  
fprintf(f1,"\n"); 
mas[t]=s[i];    
t++;
cout<<" Встречается "<<k<<" Раз";
    }
}   
fclose(f);
fclose(f1);
printf("\nНажмите любую клавишу");
getch();
}
zss
Модератор
Эксперт С++
6248 / 5851 / 1891
Регистрация: 18.12.2011
Сообщений: 14,992
Завершенные тесты: 1
03.01.2014, 19:29     Объясните строчку в программе #17
Первая неувязочка:
массив mas используется уже в строчке 21, но нигде до этого не заполняется.
Broke777
1 / 1 / 0
Регистрация: 19.09.2013
Сообщений: 43
04.01.2014, 12:12  [ТС]     Объясните строчку в программе #18
Программа работает нормально

Добавлено через 13 часов 29 минут
вверх, помогите разобраться с работой цикла
zss
Модератор
Эксперт С++
6248 / 5851 / 1891
Регистрация: 18.12.2011
Сообщений: 14,992
Завершенные тесты: 1
04.01.2014, 12:35     Объясните строчку в программе #19
Цитата Сообщение от Broke777 Посмотреть сообщение
помогите разобраться с работой цикла
Как с ним разобраться, если в массиве mas хранится мусор, а Вы пытаетесь
сравнить его значения с элементами массива s.
Может все-таки mas - это кодовая таблица, которая записана в каком-то файле
и ее надо сначала оттуда извлечь?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.01.2014, 13:43     Объясните строчку в программе
Еще ссылки по теме:

Объясните, как понять строчку в коде C++
Объясните строчку C++
C++ Объясните, пожалуйста, строчку var %= 1000
C++ Объясните строчку из стандарта
объясните, пожалуйста, полностью строчку с циклом C++

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

Или воспользуйтесь поиском по форуму:
Broke777
1 / 1 / 0
Регистрация: 19.09.2013
Сообщений: 43
04.01.2014, 13:43  [ТС]     Объясните строчку в программе #20
Поясните...
Yandex
Объявления
04.01.2014, 13:43     Объясните строчку в программе
Ответ Создать тему
Опции темы

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