Привет, анончик. Тема моего треда-программирование. Хочу попросить тебя, друг, объяснить мне смысл программы на пикриле.То, что подчеркнуто красным: Мы объявляем указатель и присваиваем ему символьную строку. Зачем нам нужен указатель s?Голубым: мы присвоили s переменную str, чтобы впоследствии проводить какие-то операции с нашей строкой.Фиолетовым: цикл for. Нам не нужна точка отсчета. По дефолту он будет проводить свой цикл, начиная с самого начала? А дальше указатель str считывает каждую букву до тех пор, пока не встретится с нуль символом?Желтым: пока в указателе str есть символ, то переписывать каждый символ, начиная единожды с впереди стоящим. Так?Жду вашей помощи, друзья. Надеюсь, что вы мне поможете понять программу, как необходимо
>>121543615 (OP)Берешь книжку по плюсам и наворачиваешь.Слишком много говна, чтобы пояснять.
>>121543972Один пост пояснит мне, что да как. С книгой уйдет гораздо больше времени, а здесь такие темы из учебников, которые описываются по 30-40 страниц. А тут один ответ нужен, чтобы понять смысл всего написанного.
>>121544677Ответ мб и один, но он будет огромен и не охватит все аспекты программирования, т.е. ты также будешь продолжать делать говнокод с ошибками.
>>121544768Я не думаю, что ответ будет огромен. По каждому вопросу можно ответить в один-два-три небольших предложения, чтобы понять, зачем они прописываются. Я не прошу объяснять мне элементарное. Просто сказать: “вот это нужно потому, что это терминнейм, который дает программе в определенной строке работать так, как надо“
>>121543615 (OP)Переменной присваивается не строка, а указатель на строку. Собственно, в Си нет отдельного типа "строка", есть только указатель на область памяти. По соглашению признаком конца строки является нулевой байт. Во втором цикле этот \0 и проверяется.
>>121543615 (OP)пиздец, кто так строки объявляет? ты ищешь себе проблемы с указателями ?пищи такchar str[] = "text\0";ты забыл нуль-символПочитай как пишется for, что за нечитабельный пиздец у тебя там
>>121545560Это пример из материалов, которые я нашел. Вот, сижу и решаю
>>121545560абалдел штоле ? не нужен никакой нуль символ
короче, программа норм, указатель s не нужен
>>121545661серьёзно, не знаю какой у тебя "уровень", но если ты новичок в плюсах, то лучше пиши так что бы тебе был понятносудя по всему, for пропускает пробелы, заметь символ ; после скобкизатем строка без пробелов записывается в поток ввода-вывода, но лучше для таких операций юзать специальные функции для работы со строками, ибо у тебя могут возникнуть проблемы
>>121545560>char str[] = "text\0";>\0";
>>121545661Это где ты подобрал материалы без пояснений?Жирновато.
>>121545998Это не моя прога. Я ее нашел с заданием:"Объясните использование типов, переменных и констант.что будет напечатано в результате выполнения этого фрагмента программы"
чуваки не надо прикапываться к стилю, это учебный материал. Тут специально используются указатели вместо стрингов
>>121543615 (OP)Кооче ты сперва инклюдиш какойто стдавх, эхз чо это, потом вводвывот инклюдишь в прогу короче.Вот. Ну там дальше тоже хуйня какая то есть.
>>121546183Пояснения есть, но уж больно все там смутно
>>121543615 (OP)ты что, ебанутый? Зачем тебе плюсы? Учи сразу норм язык
Цикл for: увеличивать указатель str, пока он указывает на пробел. Цикл while: вставлять символ на который указывает str в поток cout и увеличивать str, пока str не указывает на 0 (нуль-символ)
>>121546536пхп?
>>121546536Всяко въебывать на плюсах в вузике. надо чо-то знать
В цикле for первый непробельный символ ищем, вернее его позицию. Затем в while выводим строку посимвольно, начиная с позиции первого непробельного символа.
>>121546791Понял тебя, анон. Спасибо
Только вот нихуя не понял с укзателем *s. Зачем мы его прописали и каким образом? Есть же термин
Как дойдет до меня с указателем *s, вкинуть еще задачек или тред можно слить?
>>121545560Он сам добавляется при такой записи, что память сначала не выделили явно тебя же не смутило
Можно вообще королем потока стать, заявив, что запись char str = "stroka" неправильная, т.к. str указывает на строковую константу. Правильно надо писать const char str = "stroka" . Некоторые современные компиляторы даже предупреждение выдают.
>>121548010звездочки потерлись
>>121548010Поясни лучше за указатель *s. Королем ты здесь не станешь, но сделаешь добро для меня. Буду тебе благодарен. А потом, если желаешь, вкину еще задач
>>121547215Указатель s нигде не используется. Скорее всего его просто ввели для демонстрации присваивания.
>>121548306То есть программа будет исправно работать, если я уберу указатель *s из переменной указателя на строку и операции присваивания?
>>121548491Да и еще строку "cout << s" - вывод строки на экран.
>>121548618>>121548306Двачую
>>121548618Спасибо. Выручил
>>121545560>char str[]А это уже будет не переменная указатель, а массив элементов с памятью в стэке.
#include <iostream>using namespace std;struct pel{ int data; pel next;};void spisok(){ int s; pel head = NULL; pel fin = NULL; for (int i = 0; i <10; i++) { s = i; pel np = new pel; if (head == NULL) head = np; else fin -> next = np; fin = np; fin -> data = s; fin -> next; } pel *np = head; while (np != NULL) { cout << np -> data << endl; np = np -> next; } while (head != NULL) { np = head -> next; delete head; head = np; }}int main(){ spisok();}
>>121543615 (OP)Указатель первоначально указывает на строку с пробелами в начале.В фиолетовой строке циклически указатель на начало строки смещается вправо, пока не кончатся пробелы.В желтой строке в стандартный вывод выводится результирующая строка (без пробелов) по буквам.Точно не уверен, но данная операция небезопасна - если потом удалять такой модифицированный указатель, то проебется память. Но это не точно.
>>121549350>Точно не уверен, но данная операция небезопасна - если потом удалять такой модифицированный указатель, то проебется память. Динамическая память здесь не выделяется, только на стеке и память под строку в блоке статической памяти.
>>121549086Не, строковую константу компилятор перенесет в сегмент данных при линковании, так что сам указатель будет на стеке, а указывать будет в сегмент данных.
Если тред погибнет, то во вторник в данное время -4 часа где-то создам новый. Именую себя Рудиком.P.S. не хач
>>121549650Не, компилятор обсчитает для тебя длину массива и выделит память на стеке.
>pelЧто это вообще?>pel head = NULL; pel fin = NULL;Здесь задаем нулевые значения переменным.
>>121550064Понял, pel-название структуры
>>121549638Я не про динамическую, а про стек. По выходу из области видимости объекты по идее уничтожаются, но видимо компилятор как-то хитро их оптимизирует, потому что ошибку я не получаю.
>>121550149Но все равно не понимаю такую вещь>pel next pel head pel *finЗачем мы постоянно пишем это? Локализуем?
>>121543615 (OP)За 5 баксов, поясню в скайпе за память в с++.
>>121550313Это что-то вроде индексапо типу i++;
>>121550415Не тот ресурс для заработка выбрал. Я-бич
>>121550232На то он и стэк он же в обратку раскручивается. Что по твоёму должно здесь протекать? Локальные переменные удаляются, глобальные и строка тоже.
Правильно будетpel head = nullptr; pel fin = nullptr;
>>121550609звезды опять затерло
>>121550609Чем он правильней? Объясни
>>121549955Хочешь поспорить?)
>>121543615 (OP)Красное - создаём два указателя на строку, одну строку задаём изначально.Синее - копируем указатель на заданную строку.Фиолетовое - передвигаем указатель str по строке до тех пор, пока условие выполняется (текущий символ - пробел). В итоге str будет указывать на букву T.Желтое - до тех пор, пока по указателю *str не находится нуль-символ выводим посимвольно.Короче, эта хуйня выведет ту же самую строку, только без пробелов впереди.
>>121550670тем, что слова NULL нет в стандарте c++ .
>>121550760Хорошо. Буду знать
>>121543615 (OP)Выебоны с указателями до добра не доведут.Алсо, ты похож на тролля.
>>121550997Это реальные задания студентов в ВУЗике
Собственно, всё так и есть.>>121550734
>>121551100В общем, сперва выводится строка с пробелами в начале, затем уже без пробелов, посимвольно. Все переменные нужны.Но, вообще-то, вот эти игрища с char* более характерны для чистого Си. А зачем здесь тогда cout вместо православного printf()?Тот, кто составлял задания, учит плохому. Я не знаю, для чего это может потребоваться, такое писать. Мне сложно понять, для чего это вам задают - учат читать хуевый код? Его не читать надо, валить надо из того места, где код хуевый.
>for (int i = 0; i <10; i++)> { s = i;>pel *np = new pel;> if (head == NULL) head = np;>else fin -> next = np;> fin = np; > fin -> data = s; > fin -> next;> }Что вообще здесь происходит?
>>121551253А почему s вывело строку, а не что-то вроде 0x7504f074?
>>121549955Бред несешь. Если ты массив объявляешь, то да, под него память резервируется в стек-фрейме. А если объявляешь строковую константу, то она помещается в сегмент данных. Да ее и вообще нельзя поместить в стек-фрейм, т.к. он создается в рантайме.
>>121551419ТГУ. Хуй знает, что у них в голове, но, видимо, что-то нехорошее
>>121551419Связный список гугли
>>121551419В односвязный список засовывают элементы, в элементе есть int и указатель на следующий элемент. В списке в итоге будет 10 элементов с int'ами от 0 до 10fin - текущий последний элементhead - первыйnp - текущий
>>121551492http://www.cplusplus.com/doc/tutorial/pointers/"с & выведет"
>>121551660Спасибо. Этого достаточно, чтобы осознать эту часть
>>121551492потому что для cout перегружен вывода char* как строки нуль-терминированной
>>121551492Потому что s - указатель на строку, очевидно же.
>>121551492Потому что у cout есть перегруженная операция для указателя на char, которая выводит строку, а не значение указателя.
>>121550609Ну строго говоря, nullptr появился только в C++11, а в задании хз какой компилятор используется, может, древний какой-нибудь - от вузиков такое вполне можно ожидать.
СКЕРТ СКЕРТ++
>>121551754Я тебе слегка завидую.Также, рекомендую учить JS, npm и прочее такое для фронтенда. А сишечку и прочее такое - в гроб. Чрезвычайно сложно будет найти на этом работу за деньги.
>>1215519551с идет нахуй?
>>121551884Борланд Паскать в досовском-окошке. И на клавиатуре западают пробел, ентер и backspace, сначала ты набираешь-набираешь, а потом оно СТИРАЕТСЯ, БЛЯДЬ.Я потом пошел работать при кафедре и эти клавиатуры заменил, потому что нельзя над студентами так издеваться.
>>121552003Конечно.мимофрилансерРубльВСекунду
>>121552003Если ты не планируешь переезжать из нашей славной РФ - то да. Из 1С можно перейти в SAP и свалить так, но боюсь сейчас, в кризис, это будет крайне сложно.
>>121551955ну конечно, у нас же целое IT из веб-разработчиков только
>>121551955Буду признателен, если накидаешь годных туторов или книженций, материалов и т.п.
>pel *np = head;>while (np != NULL)>{ cout << np -> data << endl;>np = np -> next; }Здесь, как я понимаю, идет вывод списка, начиная с 10 и проверяя последующее значение, пока не встретит 0
>>121551955Я год сидел через стол от железнячника, писавшего на си для терминалов бесконтактных карт mifare.А на пике - тамошний туалет. Хочешь там работать?>>121552172К сожалению, не накидаю. По этой области мало что есть хорошего, JS - good parts, разве что.
Бля>>121552155 -> >>121552433пикча для тебя
>>121552433Спасибо и на этом
>>121552431>np = np -> next; }Вот это не понятно. Мы ведь сначала функцию вывода написали, а потом вот это. Как это объяснить правильно?
>>121546564Те же плюсы
>>121551542>ельзя поместить в стек-фрейм, т.к. он создается в рантаймевсе что создается в рантайме, помещается в стек, пидор.
>>121552773Проходимся по списку, начиная с головы, пока текущий элемент не станет null. В конце каждого шага текущему элементу присваиваем указатель на следующий, который берется из текущего же.
>>121552883Ой-вей. И то, что в куче, тоже?>>121552865Как не стыдно такое писать, люди же поверят.
>>121553059где ты кучу там увидел, пидор?
>>121553172Ты писал:>все что создается в рантайме, помещается в стекelem *e;e = new elem();Где лежит e?
>>121553317в стеке лежит, хуйло.
>>121553439Ты ошибаешься. В каком-то ОЧЕНЬ ОСОБОМ случае new может быть переопределен и работать со стеком, а не с кучей, но в 99.9999% случаев такого не бывает.
>>121552987>while (head != NULL)>while (np != NULL)Cтоп. Если мы, начиная с головы, проходимся по списку до нуля, то в np мы задаем значения? А с помощью head=np присваиваем значения?
>>121545998>for пропускает пробелы,Только в начале строки.
>>121546393>смутноКонкретнее. Что именно непонятно?
>>121553963Друг, первую задачу мне уже анончики довольно понятно объяснили. Сейчас я бьюсь со второй
>>121553862Не значения. Здесь проверка на последний элемент, а не на данные в элементе.np - текущий элемент, мы в него записали головупотом у текущего мы берем следующий и пишем в текущийесли текущий оказался null - значит мы все выбрали, список окончился
>>121553605Указатель e находится на стеке, выделенный блок памяти под объект – в куче.
>>121552883Не всё.
>>121554165Да, я понял тебя. Спасибо
>>121554166Да, это верно.
>>121553605блять когда надо хуй найдешь ссылку. кароч обычно - в 99.9999% - хип создается в конце сегмента стека.т.е. в стеке.
Спасибо всем, кто помогал. Если тред сольют, то пересоздам во вторник
>>121554251Это уже детали реализации.
>>121549350>результирующая строка (без пробелов).Только в начале строки.
>>121551369>В общем, сперва выводится строка с пробелами в начале, затем уже без пробелов, посимвольно.Неверно.
>>121545984Нужен.
>>121554604Почему ты так думаешь? Посмотри на пример вывода в треде.
>>121548306Его ввели, чтобы не потерять адрес начала строки.
>>121554604Нет, ну скажи хоть суть своей правоты. Так неинтересно без аргументации
>>121554763Это видимо мимикрокодил с недосыпом. Сперва протупил, а теперь ему признаться стыдно.
>>121549324На pastebin выложи.
>>121554667он думает что будут выводиться строки с откусыванием по одному символу.но строка выводится при помещении указателя на char, а не разыменованного указателя.
>>121549324Блядь, это типа односвязный список? Учебник мне твой не нравится: линейный самоадресуемый хуюемый, бфдто специально запутать хочет пидр.
>>121554721Каким термином можно назвать указатель *s, который стоит в присваивании символьной строки
>>121554251brk() с тобой не согласна.
>>121554923Я буду рад посмотреть на твой вариант программы с односвязным списком
>>121554928Термином? Хм... Переменная хранящая адрес начала строки...
>>121555144Хорошо, спасибо
>>121554962Для начала, вы вообще попытайтесь себе представить рост стека в такой модели.
>>121555030struct List{ int Data; List Next;};void print(List Head){ if (Head != NULL) { std::cout << Head->Data << "\t"; print(Head->Next); } else std::cout << "\n";}void read(int n,List Head){ if (n > 0) { (Head) = new List(); std::cout << "Введите значение "; std::cin >> (Head)->Data; (Head)->Next=NULL; read(n-1,&((Head)->Next)); }}void create(List lst){ int n; std::cout<<"N="; std::cin>>n; read(n,lst); sort(lst);}Как-то так.Я не код твой критиковал, мне не понравились слова линейный хуейный самохуямо вместо прсотого и понятного односвязный.
>>121555201Да у них препод - потомственный мудак, это видно по заданию из первого же поста в треде.
>>121555201Тогда ясно. В голове у преподавателей что-то не то, видимо
>>121555179Навстречу куче. Следующий.
И вопрос насчёт первого задания, где пробелы. А строка все пробелы-то не уберет?
>>121555270Нарисуй.Кстати, куч бывает несколько.
>>121555201Ну линейный понятно (хотя нелинейный это строго говоря уже и не список, ну если мы не о всяких skip-list-ах). Но вот "самоадресуемый" меня в своп вогнало надолго.
>>121555334Только те, которые в начале. И они не убираются, а просто пропускаются перед выводом.
Только в конце прошлой недели прошли по инфе стеки и кучи, и тут этот тред. Ты что, со мной в группе учишься?
>>121555334Или программа построена на том, что убирает пробелы только перед тестом, а после первого символа прекращает работу, либо как?
Делать указатель на константу хуёвая идея.
>>121555407По всей стране учебные программы в общем-то одинаковые.
>>121555381Ну бля, это знаешь как мужской половой хуй вместо член, что-то в таком духе.
>>121555407Это материалы из ТГУ. А я пока что только готовлюсь
>>121555357stack segment ----> <---- heap segmentПро kernel stack, mmap, и прочий bss рассказать, зайка?
>>121555431Не выдумывай.
>>121555609Расскажи, как решается проблема сегментирования кучи.
>>121554962>brk()http://www.geeksforgeeks.org/memory-layout-of-c-program/ - читаниbrk раздвигает сегмент неинициализированных данных за счет стека, т.е вторгается в стек
>>121543615 (OP)В очередной раз понимаю, насколько кресты омерзительный язык и насколько мне противно олимпиадное программирование.ОПу уже пояснили или это могу сделать в очередной раз я?
>>121555810В крестах был бы std::string или как его. А в начале треда - поганая смесь Си и С++.
>>121555810Я усваиваю уже, что ява-для богов, а кресты-для хуев
>>121555810Кресты, кресты... Кресты не причём! И вообще не ясно, нахуя там чар, если есть стринг. А может и надо так. Был бы программистом, сказал бы точно.
>>121555810гнусавым голосомНа столе стоят три одинаковых ящика. В одном из них 2 черных шарика, в другом 1 черный и 1 белый шарик, в третьем 2 белых шарика. На ящиках написано: "2 белых", "2 черных", "черный и белый". При этом известно, что ни одна из записей не соответствует действительности. Как, вынув только один шарик, определить правильное расположение надписей?и подобная херь
>>121555872А не, видимо не одному мне атк кажется. Ещё Страуструп писал, что везде где можно юзай стринги вместо чар[] и вектора вместо массивов. >>121555956-кун
>>121555982Погнали! в прошлый раз была про мышей и вино!
>>121555982вытащить шар из ящика "черный и белый"
>>121555872Не просто поганая, а ПО-УНИВЕРСИТЕТСКИ ПОГАНАЯ. Все верно, стринг. >>121555956Пральна. Только университетские задания не всегда соответствуют логике. Я вообще не понимаю, где эта хуйня может быть не понадобится, кроме как Я МАГУ и/или А ПОЕДЬ-КА НА ОЛИМПИАДКУ.>>121555895>ява-для боговФи. На самом деле язык — только инструмент. Но есть инструменты откровенно хуевые вроде PHP.>>121556047Вин. Тем не менее, в универе это не избавляет меня от задачи рода «отсортируй массив». Хотя для генерации этого массива я пользуюсь няшненькими векторами.
>>121556047И вообще стл не просто так написана.
>>121556077Собеседовался я в яндекс на какой-то их внутренний десктопный проект. На C#. А на соебседовании меня масковские физматики зачем-то начали спрашивать про мапредьюс и сортировку данных, которые в память не влазят. Я им на ходу придумал сортировку частями, так они попросили меня оценить сложность в O. Вот не понимаю я таких людей. Впрочем, их бог наказал уже, яндекс дохнет потихоньку.
S нужна чтобы не проебать начало оригинала строки.Str мы уже двигаем по нашей строке как нам надо. Цикл for сдвигает указатель до тех пор, пока встречает пробелы, т.е. после его выполнения s будет указывать на первый символ не пробел.Дальше, в цикле while, просто выводим строку посимвольно до тех пор, пока в ней что-то есть.
>>121556711А ты, смотрю, ответы на ОП-пост не читаешь, программист?
>>121556765Нет, для слабых же.
>>121556118И правда чёрный и белый.
Ну-ка, бамп
>>121543615 (OP)Первую строку лучше над такchar str[200]=" текст в строке ОПа хуя", *s;мб то что оп написал и прокатит, но в части компиляторов на присваиваемую строку может выделяться память в какомто специальном месте хз,зависит от реализации компилятора, и по тому адресу где была строка может быть чото другое, а может уже освобожденная память
Подкину тогда еще. Желающие приветствуются#include <iostream>#include <cstring>using namespace std;void mass_str (){ cout << "kol-vo slov \n"; int i; cin >> i; cout << endl; if (i <= 20 && i > 0) { cout << "slova \n"; char m_str [i+1] [11]; for (int j = 0; j < i; j++) { cin >> m_str [j]; if (strlen (m_str [j]) > 10) { j--; cout << "ERROR, 10 smb. - max; rewrite \n"; } } cout << endl << endl; for (int j = 0; j < i; j++) { if (j % 2 == 0) cout << m_str [j] << endl; } } else cout << "ERROR, no more then 20 words, restart programm";}int main(){ mass_str(); return 0;}
>>121557691#include <iostream>#include <cstring>using namespace std;void sch(){ char txt[64] = ""; cout << "text : 64 smb - max \n"; cin.getline(txt, 64); cout << strlen(txt) << " smb \n \n";}void st(){ char txt1, txt2; txt1 = new char[64]; txt2 = new char [64]; cout << "txt1 :" << endl; cin.getline(txt1, 64); cout << "txt2" <<endl; cin.getline(txt2, 64); cout << endl; if (strcmp (txt1, txt2) == 0) cout << "txt1 == txt2 \n \n"; else cout << "txt1 != txt2 \n \n"; delete [] txt1; delete [] txt2;}void ob(){ cout << "Enter the string: "; char strg_r[128], strg1, strg2; strg1 = new char[64]; strg2 = new char [64]; cout << "strg_1 \n"; cin.getline(strg1, 64); cout << "strg_2 \n"; cin.getline(strg2, 64); strcpy(strg_r, strg1); strcat(strg_r, strg2); cout << "result \n" << strg_r << endl; delete [] strg1; delete [] strg2;}int main(){ cout << "1" << endl; sch(); cout << endl << "2" << endl; st(); cout << endl << "3" << endl; ob(); return 0;}
Будет хорошо, если свое предложите(желательно, с объяснением)
>>121549324#include <stdio.h>#include <stdlib.h>#include <stdbool.h>typedef struct node { int data; struct node• next;}node;void add(node•• head, int data) { node• n = (node•)malloc(sizeof(node)); n->data = data; n->next = NULL; if (•head != NULL) { (•head)->next = n; } •head = n;}int main() { #define NUM_ELEMS 10 node• head = NULL, •first = NULL, •curr = NULL; int i = 0; bool is_first = true; for (; i < NUM_ELEMS; i++) { add(&head, i); if (is_first == true) { first = head; is_first = false; } } for (curr = first; curr != NULL; curr = curr->next) { printf("%d ", curr->data); } return 0;}
>>121558004Я впервые вижу такие точки в крестах
>>121558004Итак. Чем программа хороша, чем предложенная мною?
>>121558230Это вместо *
>>121558294Модульностью, декомпозицией, рамширяемостью.
>>121558294Где твоя?
>>121558475Я же к каждому заданию прикреплял коды
>>121558401Постараюсь сегодня под вечер разобраться, как появится время
>>121557691#include <stdio.h>#include <stdbool.h>int main() { #define NUM_WORDS 10 #define MAX_WORD_LEN 20 char words[NUM_WORDS][MAX_WORD_LEN] = {NULL}; int i = 0; for (; i < NUM_WORDS; i++) { scanf("%s", words); } for (i = 0; i < NUM_WORDS; i++) { if ((i % 2 == 0) == true) { printf("%s\n", words); } } return 0;}
>>121558684>printf("%s\n", words[ i ]);
>>121558684>>121558684Ты не учел нуль символ. Или же здесь это не обязательно?
>>121558230Это не кресты.
>>121558850Не обязательно.
>>121558890Понял. Спасибо, что помог
>>121558684>if (i % 2 == 0) проиграл от самого себя
>>121558939Разбирайся, не списывай вслепую.
>>121559007Да, я так и делаю. Хочу же понимать, что нужно писать
>>121555794>т.е вторгается в стекСо знаменем.
>>121558972я так могу, ЛОЛКЕКif (((((i % 2 == 0) == true) == true) == true) == true)