Изучение C++ для начинающих / #9 - Работа со строками и символами

  Рет қаралды 85,397

Школа itProger / Программирование

Школа itProger / Программирование

Күн бұрын

Пікірлер: 95
@itsmusic2597
@itsmusic2597 11 ай бұрын
Не упомянут очень важный момент! cin для строк работает, но если вы впишите текст, к примеру "Hello world" то в переменную попадут только символы до первого пробела. Чтобы записать весь текст нужно использовать как раз getline(), а подключается он в директиве
@billy.herringt0n116
@billy.herringt0n116 10 ай бұрын
Я удивлён, что этого больше никто не написал, когда увидел что он говорит, волосы дыбом встали
@darkybebra
@darkybebra 8 ай бұрын
Если челы не знают, то пишется так: getline(cin, var); где var это переменная, в которую записывается значение
@ДимкаКузённный
@ДимкаКузённный 6 ай бұрын
​@@darkybebraСпасибо огромное за приведённый вами пример очень помог.
@Leo_Forter_Jalis
@Leo_Forter_Jalis 6 ай бұрын
Привет C-строки
@Антон-ю4д9ю
@Антон-ю4д9ю 5 ай бұрын
@@darkybebra А если надо записать кириллицей? Просто когда я ввожу сбивается кодировка(Даже если подключен setlocale(LC_ALL, "RU"))
@stinger9811
@stinger9811 Жыл бұрын
Спасибо автору за обучение!!!
@deffu4790
@deffu4790 Жыл бұрын
Даровыч! По поводу ввода символов на кириллице. Русского языка вы там не увидите, так как setlocale работает ТОЛЬКО (как я понял) на вывод (То что вы пишите после команды cout) данных. Нашел решение через смену кодировок самой консоли. Русскоязычная кодировка представлена как "cp1251". (Как понял я, вы указываете кодировку "1251", программа это читает и переводит это в свою кодировку "866", и с учетом этого показывает вам русские символы. Как то так, изучите это самостоятельно) Что делать? Подключаете библиотеку "Windows.h" для работы с командами "SetConsoleCP"(Грубо говоря, работает как setlocale, ставит указанную вами кодировку на вывод данных) и "SetConsoleOutputCP"(Тоже самое, только кодировка ставится на ввод данных, что и решает данную проблему) то есть Include SetConsoleCP(1251); SetConsoleOutputCP(1251); после этого setlocale вам не пригодится в коде, как я понял, но это не точно. Ну и, так как я сам учусь (много что не понимаю), изучите тему "кириллицы в консолях" самостоятельно!!! Удачи.
@deffu4790
@deffu4790 Жыл бұрын
Дополню. cin читает текст до первого пробела (то есть, если вы введете "Hello World", он выдаст только "Hello"). Вместо него используйте getline(cin, words) (words - название переменной string)
@hevdjeoekdnd
@hevdjeoekdnd 20 күн бұрын
Спс большое, я блин долго не смог это сделать, даже с чат GPT.
@СашаПриходько-щ8ю
@СашаПриходько-щ8ю 3 ай бұрын
Огромное спасибо за видео!
@Someone_Game999
@Someone_Game999 Жыл бұрын
Как всегда супер!
@Ms27047
@Ms27047 Жыл бұрын
Уважаемый Гоша Дударь можете сделать курс по фронтэнду или бекэнду?
@SolarSystem_sUser
@SolarSystem_sUser 6 ай бұрын
для новичков тут самое оно. я полез в дебри и там масса костылей. выяснилось что _flushall() в новых версиях VS уже не чистит буфер, а нужно использовать cin.ignore(), а функция max конфликтует, если подключена библиотека window.h и т.д. так что для начала обучения - то что надо.
@xrtkirill7253
@xrtkirill7253 Жыл бұрын
у меня проблема. Когда я заменяю текст с помощью команды cin >> words на русский, то у меня выводит рандомный набор символов, хотя setlocale я ставил
@f0xfffffff964
@f0xfffffff964 Жыл бұрын
возможно тебе надо поменять кодировку консоли, я честно не помню какую именно и как именно это сделать, но скорее всего проблема в самой конфигурации консоли
@ualivaliyev4721
@ualivaliyev4721 Жыл бұрын
Попробуй getline(cin, name);
@zxtired7804
@zxtired7804 4 ай бұрын
Даровыч! По поводу ввода символов на кириллице. Русского языка вы там не увидите, так как setlocale работает ТОЛЬКО (как я понял) на вывод (То что вы пишите после команды cout) данных. Нашел решение через смену кодировок самой консоли. Русскоязычная кодировка представлена как "cp1251". (Как понял я, вы указываете кодировку "1251", программа это читает и переводит это в свою кодировку "866", и с учетом этого показывает вам русские символы. Как то так, изучите это самостоятельно) Что делать? Подключаете библиотеку "Windows.h" для работы с командами "SetConsoleCP"(Грубо говоря, работает как setlocale, ставит указанную вами кодировку на вывод данных) и "SetConsoleOutputCP"(Тоже самое, только кодировка ставится на ввод данных, что и решает данную проблему) то есть Include SetConsoleCP(1251); SetConsoleOutputCP(1251); после этого setlocale вам не пригодится в коде, как я понял, но это не точно. Ну и, так как я сам учусь (много что не понимаю), изучите тему "кириллицы в консолях" самостоятельно!!! Удачи.
@xrtkirill7253
@xrtkirill7253 4 ай бұрын
@@zxtired7804 ого, спасибо большое, позже попробую
@ДареанМинров-б4ф
@ДареанМинров-б4ф 2 ай бұрын
5:25 Кодировка с самого начала не работала. Вместо кириллицы выдаёт ?????, по одному ? на каждый символ кириллицы
@nikkyhika3694
@nikkyhika3694 Жыл бұрын
помоги пожалуста, а что нужно делать если когда я в cin пишу текс с двумя словами выводит только певрое слово?
@дима-д7з5й
@дима-д7з5й Жыл бұрын
после назначения переменой типа string, укажи так: getline(cin, название твоей переменной); тогда будет читать и пробел
@nikkyhika3694
@nikkyhika3694 Жыл бұрын
@@дима-д7з5й спасибо
@ршгргршм
@ршгргршм 10 ай бұрын
@@дима-д7з5й спасибо, помог
@yamaracuya
@yamaracuya 3 ай бұрын
​@@дима-д7з5йхорошо, что есть комментарии
@vladislavabp
@vladislavabp Жыл бұрын
расскажите что делать, если при получении информации от пользователя на русском языке через string получается ерунда из рандомного колличества символов? мб надо вводить что то помимо setlocale, что бы руссификатор появился?
@l1tezmmb
@l1tezmmb Жыл бұрын
setlocale(LC_ALL, "RU"); или посмотри точно у тебя русская раскладка, а не другая
@motionflash878
@motionflash878 Жыл бұрын
@@l1tezmmb Я поменял кодировку на "RU" но всё равно в переменную сохраняется какая-та ерунда. Есть какой нибудь способ исправить это?
@kpanat
@kpanat Жыл бұрын
@@motionflash878 system("chcp 1251>nul") устанавливает русский и на ввод и на вывод одновременно. Почему и как долго объяснять.
@motionflash878
@motionflash878 Жыл бұрын
@@kpanat спасибо я уже решил эту проблему при помощи SetConsoleCP(1251);
@БоснакБоснак-щ5е
@БоснакБоснак-щ5е 10 ай бұрын
SetConsoleCP(1251);// установка кодовой страницы win-cp 1251 в поток ввода SetConsoleOutputCP(1251); // установка кодовой страницы win-cp 1251 в поток вывода решает проблему
@_reezzotto_
@_reezzotto_ Жыл бұрын
Есть проблемка. Когда я вводил строку с пробелами, в words записалось только первое слово
@alex_mangust
@alex_mangust Жыл бұрын
Вместо cin(переменная); попробуй getline(cin, переменная);
@ДенисТретьяков-т3ч
@ДенисТретьяков-т3ч Жыл бұрын
getline не обращает внимание на пробелы, ест с ними Так что уважаемый автор. getline не атавизм, как я думаю, а вполне рабочая система
@kpanat
@kpanat Жыл бұрын
Это ещё одна проблема... Вводит только до пробельного символа. Надо просто явно указать символ до которого читается . По умолчанию это пробельный символ. Но если указать конец строки то будет считывать всю строку до ввода конца строки который вводится когда мы нажимаем клавишу Enter. Сам символ конца строки при этом в ввод не попадает. Это символ ' '.
@kpanat
@kpanat Жыл бұрын
@@ДенисТретьяков-т3ч Нормальные люди вводят строки через getline. Причём такой способ никогда не генерит ошибки и всегда даёт конкретный результат. Возможно не тот ,что вы ожидали. Но его можно анализировать. автор не слишком компетентен в этом вопросе. Но даже простой ввод целого числа вот так int n; cin >> n; легко может подвесить вашу программу если вы будете вводить не число которое преполагается а нечто другое... Просто эта команда нормально работает только если вы вводите именно число. А если среди введённых символов нет ни одного допустимого она жёстко зависает... Если же вы вводите через getline всё проходит без проблем и вы получаете строку которую потом можете запарсить и сказать что не так ввели. Иначе ваша прога зависнет и вам придётся её гасить возможно чрез диспетчер задач... Вот так работает "не атавизм"...
@damirasanov8993
@damirasanov8993 Жыл бұрын
36 секунд назад 🙂
@shkeldm
@shkeldm Жыл бұрын
Добрый вечер, где можно задать вопрос?
@clipniker8423
@clipniker8423 Жыл бұрын
Я не понимаю, что за пространство имен, и откуда они появляются?
@diowh9948
@diowh9948 Жыл бұрын
Пространство имен - это декларативная область, в рамках которой определяются различные идентификаторы (имена типов, функций, переменных, и т. д.) с гугла скопировал для тебя
@ВячеславОрлов-л1с
@ВячеславОрлов-л1с Жыл бұрын
​@@diowh9948 какой же ты великолепный. Почти полубог
@TSlex
@TSlex Жыл бұрын
пространство имен оно как дом/квартира, все кто внутри могут обращается к друг-другу напрямую, а для тех кто снаружи нужно знать еще и адрес дома 🐸🐸
@clipniker8423
@clipniker8423 Жыл бұрын
@@TSlex Понял спасибо
@121theSTALKER
@121theSTALKER Жыл бұрын
у меня не инциализированна перменная i (в word[i], почему то не видит ее компилятор.
@looc-xp5sd
@looc-xp5sd 8 ай бұрын
; лишняя?
@AndriiTurchynRieltorDnipro
@AndriiTurchynRieltorDnipro Жыл бұрын
дякую++
@EtichniyKirill
@EtichniyKirill 10 ай бұрын
2:56 а ещё нельзя было просто так взять и не обьявить длину массива или не указать то количество элементов, которое ты написал при обьявлении массива)
@enot812
@enot812 Жыл бұрын
А почему я не могу вводить длинный текст в string?
@_1mrscool11_9
@_1mrscool11_9 6 ай бұрын
я не уверен но прочёв другие коментарии вы возможно столкнулись с проблемой что как описывают другие: cin читает текст до первого пробела (то есть, если вы введете "Hello World", он выдаст только "Hello"). Вместо него используйте getline(cin, words) (words - название переменной string)
@kpanat
@kpanat Жыл бұрын
Рассказано слишком мало. И не совсем правильно string это контейнер для хранения строки которая внутри. Это не сама строка а её оболочка. сейчас все работают именно со string а не с массивом символов. Просто так удобно... Но символьные константы по прежнему используют. Надо бы про них рассказать несколько поподробнее. А не просто привести пример даже не сказав что это такое.
@KirillShilets
@KirillShilets Жыл бұрын
Это вводные уроки, его полный курс платный, неужели нельзя мозгами подумать
@SayXaNow
@SayXaNow 7 ай бұрын
@@KirillShilets судя по чудовищному количеству неточностей и откровенной ложной информации, чел вообще не знает С++. и за подобное гуано он еще и деньги берет в платных курсах? жесть.
@migel-mihailovich
@migel-mihailovich Жыл бұрын
9:14 если введете текст на русском, то будет абракадабра
@moneymachine9630
@moneymachine9630 Жыл бұрын
а что если если хочешь ввести string с цифрами
@astrallcode
@astrallcode Жыл бұрын
Ничего, просто вводишь как обычный текст
@vada322
@vada322 11 ай бұрын
Зачем тут рассматривать как это было в C, думаю новичков только запутает
@РусланИсабеков-у1н
@РусланИсабеков-у1н Жыл бұрын
топ
@燁-g6c
@燁-g6c Жыл бұрын
Когда нибудь я буду это учить но сначала эбану питон обучение и потом и на си успею
@Massima2004
@Massima2004 Жыл бұрын
а что мешает начать изучать и Си?)))) Я учу C, C++, C# и Python и ниче)))). Уже 4.5 года прогаю
@燁-g6c
@燁-g6c Жыл бұрын
@@Massima2004 мега мозг?
@ghostface1151
@ghostface1151 Жыл бұрын
@@Massima2004 тигр
@Massima2004
@Massima2004 Жыл бұрын
@@燁-g6c не. Просто мне программирование очень нравится. У меня прям дикий огонь к этому делу)))) Прям обожаю
@Massima2004
@Massima2004 Жыл бұрын
@@燁-g6c живу этим делом
@mikhailzakharov1326
@mikhailzakharov1326 Ай бұрын
С чего он решил, что в C строку опеределяеть надо посимвольно непонятно, но очень смешно. Даже в первоисточнике K&R С, строка задается как: char words[] = "Hello world!";
@идинафиг-ы9з
@идинафиг-ы9з Жыл бұрын
го lua
@vada322
@vada322 11 ай бұрын
Проблема здесь в том, что вы используете строку типа string, которая является неизменяемой (immutable) в C++. Когда вы пытаетесь изменить символ по индексу, как в строке words[0] = 'W';, это не будет работать, потому что строки типа string в C++ не поддерживают прямое изменение символов по индексу.
@яйцопожаренное
@яйцопожаренное 11 ай бұрын
все работает, ты с чем-то путаешь
@vada322
@vada322 11 ай бұрын
@@яйцопожаренное если написать как у него( то есть с частью когда С и С++) да, но если ты напишешь только часть когда С++ то нет
@яйцопожаренное
@яйцопожаренное 11 ай бұрын
​@@vada322 строки типа std::string в C++ поддерживают прямое изменение символов по индексу и даже поддерживают изменение своего размера (длины)
@ЭльвираСадыкова-э7г
@ЭльвираСадыкова-э7г 5 ай бұрын
Скорее нельзя изменить значение переменной через ' = ' . а через индекс можно. Повидимому это ссылочный тип
@damirasanov8993
@damirasanov8993 Жыл бұрын
первый
@SayXaNow
@SayXaNow 7 ай бұрын
судя по чудовищному количеству неточностей и откровенной ложной информации, чел вообще не знает С++. и за подобное гуано он еще и деньги берет в платных курсах? жесть.
@Eragod
@Eragod Жыл бұрын
e
@gmadjyern
@gmadjyern 8 ай бұрын
Чел, слишком много воды. Зачем мне знать как это работает на языке С если я С++ изучаю?
@ЯковЛазоренко
@ЯковЛазоренко Жыл бұрын
Про работу со строками ничего нет, плохо.
Изучение C++ для начинающих / #10 - Создание функций в языке C++
17:41
Школа itProger / Программирование
Рет қаралды 91 М.
Что пишут на языке программирования C++?
16:27
Cheerleader Transformation That Left Everyone Speechless! #shorts
00:27
Fabiosa Best Lifehacks
Рет қаралды 16 МЛН
When you have a very capricious child 😂😘👍
00:16
Like Asiya
Рет қаралды 15 МЛН
Изучение C++ для начинающих / #6 - Циклы и операторы в них (For, While, Do While)
21:15
Школа itProger / Программирование
Рет қаралды 169 М.
Изучение C++ для начинающих / #12 - Указатели и ссылки
23:04
Школа itProger / Программирование
Рет қаралды 80 М.
Изучение C++ в одном видео уроке за час!
1:14:33
Гоша Дударь
Рет қаралды 831 М.
Всё об указателях в C++ за 20 минут
20:00
Как стать ДЕЙСТВИТЕЛЬНО хорошим программистом
7:35
Бинарный происк
Рет қаралды 146 М.
Изучение C++ для начинающих / #7 - Массивы данных (одномерные и многомерные)
26:09
Cheerleader Transformation That Left Everyone Speechless! #shorts
00:27
Fabiosa Best Lifehacks
Рет қаралды 16 МЛН