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

Поделиться
HTML-код
  • Опубликовано: 9 ноя 2024

Комментарии • 92

  • @itsmusic2597
    @itsmusic2597 10 месяцев назад +92

    Не упомянут очень важный момент! cin для строк работает, но если вы впишите текст, к примеру "Hello world" то в переменную попадут только символы до первого пробела. Чтобы записать весь текст нужно использовать как раз getline(), а подключается он в директиве

    • @billy.herringt0n116
      @billy.herringt0n116 9 месяцев назад +9

      Я удивлён, что этого больше никто не написал, когда увидел что он говорит, волосы дыбом встали

    • @darkybebra
      @darkybebra 6 месяцев назад +8

      Если челы не знают, то пишется так:
      getline(cin, var);
      где var это переменная, в которую записывается значение

    • @ДимкаКузённный
      @ДимкаКузённный 5 месяцев назад +3

      ​@@darkybebraСпасибо огромное за приведённый вами пример очень помог.

    • @Leo_Forter_Jalis
      @Leo_Forter_Jalis 5 месяцев назад

      Привет C-строки

    • @Антон-ю4д9ю
      @Антон-ю4д9ю 4 месяца назад

      @@darkybebra А если надо записать кириллицей? Просто когда я ввожу сбивается кодировка(Даже если подключен setlocale(LC_ALL, "RU"))

  • @deffu4790
    @deffu4790 11 месяцев назад +24

    Даровыч!
    По поводу ввода символов на кириллице. Русского языка вы там не увидите, так как setlocale работает ТОЛЬКО (как я понял) на вывод (То что вы пишите после команды cout) данных.
    Нашел решение через смену кодировок самой консоли. Русскоязычная кодировка представлена как "cp1251". (Как понял я, вы указываете кодировку "1251", программа это читает и переводит это в свою кодировку "866", и с учетом этого показывает вам русские символы. Как то так, изучите это самостоятельно)
    Что делать? Подключаете библиотеку "Windows.h" для работы с командами "SetConsoleCP"(Грубо говоря, работает как setlocale, ставит указанную вами кодировку на вывод данных) и "SetConsoleOutputCP"(Тоже самое, только кодировка ставится на ввод данных, что и решает данную проблему)
    то есть
    Include
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    после этого setlocale вам не пригодится в коде, как я понял, но это не точно.
    Ну и, так как я сам учусь (много что не понимаю), изучите тему "кириллицы в консолях" самостоятельно!!! Удачи.

    • @deffu4790
      @deffu4790 11 месяцев назад +10

      Дополню. cin читает текст до первого пробела (то есть, если вы введете "Hello World", он выдаст только "Hello"). Вместо него используйте getline(cin, words) (words - название переменной string)

  • @Ms27047
    @Ms27047 Год назад +8

    Уважаемый Гоша Дударь можете сделать курс по фронтэнду или бекэнду?

  • @stinger9811
    @stinger9811 Год назад +4

    Спасибо автору за обучение!!!

  • @СашаПриходько-щ8ю
    @СашаПриходько-щ8ю 2 месяца назад

    Огромное спасибо за видео!

  • @SolarSystem_sUser
    @SolarSystem_sUser 4 месяца назад +1

    для новичков тут самое оно. я полез в дебри и там масса костылей. выяснилось что _flushall() в новых версиях VS уже не чистит буфер, а нужно использовать cin.ignore(), а функция max конфликтует, если подключена библиотека window.h и т.д. так что для начала обучения - то что надо.

  • @Someone_Game999
    @Someone_Game999 Год назад +2

    Как всегда супер!

  • @AndriiTurchynRieltorDnipro
    @AndriiTurchynRieltorDnipro Год назад +2

    дякую++

  • @xrtkirill7253
    @xrtkirill7253 Год назад +9

    у меня проблема. Когда я заменяю текст с помощью команды cin >> words на русский, то у меня выводит рандомный набор символов, хотя setlocale я ставил

    • @f0xfffffff964
      @f0xfffffff964 Год назад +2

      возможно тебе надо поменять кодировку консоли, я честно не помню какую именно и как именно это сделать, но скорее всего проблема в самой конфигурации консоли

    • @ualivaliyev4721
      @ualivaliyev4721 Год назад

      Попробуй
      getline(cin, name);

    • @zxtired7804
      @zxtired7804 3 месяца назад +1

      Даровыч!
      По поводу ввода символов на кириллице. Русского языка вы там не увидите, так как setlocale работает ТОЛЬКО (как я понял) на вывод (То что вы пишите после команды cout) данных.
      Нашел решение через смену кодировок самой консоли. Русскоязычная кодировка представлена как "cp1251". (Как понял я, вы указываете кодировку "1251", программа это читает и переводит это в свою кодировку "866", и с учетом этого показывает вам русские символы. Как то так, изучите это самостоятельно)
      Что делать? Подключаете библиотеку "Windows.h" для работы с командами "SetConsoleCP"(Грубо говоря, работает как setlocale, ставит указанную вами кодировку на вывод данных) и "SetConsoleOutputCP"(Тоже самое, только кодировка ставится на ввод данных, что и решает данную проблему)
      то есть
      Include
      SetConsoleCP(1251);
      SetConsoleOutputCP(1251);
      после этого setlocale вам не пригодится в коде, как я понял, но это не точно.
      Ну и, так как я сам учусь (много что не понимаю), изучите тему "кириллицы в консолях" самостоятельно!!! Удачи.

    • @xrtkirill7253
      @xrtkirill7253 3 месяца назад

      @@zxtired7804 ого, спасибо большое, позже попробую

  • @_reezzotto_
    @_reezzotto_ Год назад +4

    Есть проблемка. Когда я вводил строку с пробелами, в words записалось только первое слово

    • @alex_mangust
      @alex_mangust Год назад +2

      Вместо cin(переменная); попробуй getline(cin, переменная);

    • @ДенисТретьяков-т3ч
      @ДенисТретьяков-т3ч Год назад +3

      getline не обращает внимание на пробелы, ест с ними
      Так что уважаемый автор. getline не атавизм, как я думаю, а вполне рабочая система

    • @kpanat
      @kpanat Год назад

      Это ещё одна проблема... Вводит только до пробельного символа. Надо просто явно указать символ до которого читается . По умолчанию это пробельный символ. Но если указать конец строки то будет считывать всю строку до ввода конца строки который вводится когда мы нажимаем клавишу Enter. Сам символ конца строки при этом в ввод не попадает. Это символ '
      '.

    • @kpanat
      @kpanat Год назад

      @@ДенисТретьяков-т3ч Нормальные люди вводят строки через getline. Причём такой способ никогда не генерит ошибки и всегда даёт конкретный результат. Возможно не тот ,что вы ожидали. Но его можно анализировать. автор не слишком компетентен в этом вопросе. Но даже простой ввод целого числа вот так int n; cin >> n; легко может подвесить вашу программу если вы будете вводить не число которое преполагается а нечто другое... Просто эта команда нормально работает только если вы вводите именно число. А если среди введённых символов нет ни одного допустимого она жёстко зависает... Если же вы вводите через getline всё проходит без проблем и вы получаете строку которую потом можете запарсить и сказать что не так ввели. Иначе ваша прога зависнет и вам придётся её гасить возможно чрез диспетчер задач... Вот так работает "не атавизм"...

  • @shkeldm
    @shkeldm Год назад

    Добрый вечер, где можно задать вопрос?

  • @vada322
    @vada322 10 месяцев назад +2

    Зачем тут рассматривать как это было в C, думаю новичков только запутает

  • @nikkyhika3694
    @nikkyhika3694 11 месяцев назад +2

    помоги пожалуста, а что нужно делать если когда я в cin пишу текс с двумя словами выводит только певрое слово?

    • @дима-д7з5й
      @дима-д7з5й 11 месяцев назад +5

      после назначения переменой типа string, укажи так: getline(cin, название твоей переменной);
      тогда будет читать и пробел

    • @nikkyhika3694
      @nikkyhika3694 11 месяцев назад

      @@дима-д7з5й спасибо

    • @ршгргршм
      @ршгргршм 9 месяцев назад

      @@дима-д7з5й спасибо, помог

    • @yamaracuya
      @yamaracuya 2 месяца назад

      ​@@дима-д7з5йхорошо, что есть комментарии

  • @Очпочмак-р9и
    @Очпочмак-р9и Год назад +6

    расскажите что делать, если при получении информации от пользователя на русском языке через string получается ерунда из рандомного колличества символов? мб надо вводить что то помимо setlocale, что бы руссификатор появился?

    • @l1tezmmb
      @l1tezmmb Год назад

      setlocale(LC_ALL, "RU");
      или посмотри точно у тебя русская раскладка, а не другая

    • @motionflash878
      @motionflash878 Год назад

      @@l1tezmmb Я поменял кодировку на "RU" но всё равно в переменную сохраняется какая-та ерунда. Есть какой нибудь способ исправить это?

    • @kpanat
      @kpanat Год назад +6

      @@motionflash878 system("chcp 1251>nul") устанавливает русский и на ввод и на вывод одновременно. Почему и как долго объяснять.

    • @motionflash878
      @motionflash878 Год назад +3

      @@kpanat спасибо я уже решил эту проблему при помощи SetConsoleCP(1251);

    • @БоснакБоснак-щ5е
      @БоснакБоснак-щ5е 9 месяцев назад +2

      SetConsoleCP(1251);// установка кодовой страницы win-cp 1251 в поток ввода
      SetConsoleOutputCP(1251); // установка кодовой страницы win-cp 1251 в поток вывода
      решает проблему

  • @kpanat
    @kpanat Год назад +9

    Рассказано слишком мало. И не совсем правильно string это контейнер для хранения строки которая внутри. Это не сама строка а её оболочка. сейчас все работают именно со string а не с массивом символов. Просто так удобно... Но символьные константы по прежнему используют. Надо бы про них рассказать несколько поподробнее. А не просто привести пример даже не сказав что это такое.

    • @KirillShilets
      @KirillShilets Год назад +1

      Это вводные уроки, его полный курс платный, неужели нельзя мозгами подумать

    • @SayXaNow
      @SayXaNow 6 месяцев назад +1

      @@KirillShilets судя по чудовищному количеству неточностей и откровенной ложной информации, чел вообще не знает С++. и за подобное гуано он еще и деньги берет в платных курсах? жесть.

  • @clipniker8423
    @clipniker8423 Год назад +2

    Я не понимаю, что за пространство имен, и откуда они появляются?

    • @diowh9948
      @diowh9948 Год назад

      Пространство имен - это декларативная область, в рамках которой определяются различные идентификаторы (имена типов, функций, переменных, и т. д.)
      с гугла скопировал для тебя

    • @ВячеславОрлов-л1с
      @ВячеславОрлов-л1с Год назад +2

      ​@@diowh9948 какой же ты великолепный. Почти полубог

    • @TSlex
      @TSlex Год назад +1

      пространство имен оно как дом/квартира, все кто внутри могут обращается к друг-другу напрямую, а для тех кто снаружи нужно знать еще и адрес дома 🐸🐸

    • @clipniker8423
      @clipniker8423 Год назад

      @@TSlex Понял спасибо

  • @damirasanov8993
    @damirasanov8993 Год назад

    36 секунд назад 🙂

  • @ДареанМинров-б4ф
    @ДареанМинров-б4ф Месяц назад

    5:25 Кодировка с самого начала не работала. Вместо кириллицы выдаёт ?????, по одному ? на каждый символ кириллицы

  • @migel-mihailovich
    @migel-mihailovich Год назад +1

    9:14 если введете текст на русском, то будет абракадабра

  • @РусланИсабеков-у1н

    топ

  • @121theSTALKER
    @121theSTALKER Год назад

    у меня не инциализированна перменная i (в word[i], почему то не видит ее компилятор.

    • @looc-xp5sd
      @looc-xp5sd 6 месяцев назад

      ; лишняя?

  • @enot812
    @enot812 Год назад

    А почему я не могу вводить длинный текст в string?

    • @_1mrscool11_9
      @_1mrscool11_9 4 месяца назад

      я не уверен но прочёв другие коментарии вы возможно столкнулись с проблемой что как описывают другие:
      cin читает текст до первого пробела (то есть, если вы введете "Hello World", он выдаст только "Hello"). Вместо него используйте getline(cin, words) (words - название переменной string)

  • @moneymachine9630
    @moneymachine9630 Год назад

    а что если если хочешь ввести string с цифрами

    • @astrallcode
      @astrallcode Год назад +1

      Ничего, просто вводишь как обычный текст

  • @EtichniyKirill
    @EtichniyKirill 8 месяцев назад

    2:56 а ещё нельзя было просто так взять и не обьявить длину массива или не указать то количество элементов, которое ты написал при обьявлении массива)

  • @燁-g6c
    @燁-g6c Год назад +1

    Когда нибудь я буду это учить но сначала эбану питон обучение и потом и на си успею

    • @Massima2004
      @Massima2004 Год назад +1

      а что мешает начать изучать и Си?)))) Я учу C, C++, C# и Python и ниче)))). Уже 4.5 года прогаю

    • @燁-g6c
      @燁-g6c Год назад

      @@Massima2004 мега мозг?

    • @ghostface1151
      @ghostface1151 Год назад

      @@Massima2004 тигр

    • @Massima2004
      @Massima2004 Год назад +1

      @@燁-g6c не. Просто мне программирование очень нравится. У меня прям дикий огонь к этому делу)))) Прям обожаю

    • @Massima2004
      @Massima2004 Год назад

      @@燁-g6c живу этим делом

  • @идинафиг-ы9з
    @идинафиг-ы9з Год назад

    го lua

  • @vada322
    @vada322 10 месяцев назад +2

    Проблема здесь в том, что вы используете строку типа string, которая является неизменяемой (immutable) в C++. Когда вы пытаетесь изменить символ по индексу, как в строке words[0] = 'W';, это не будет работать, потому что строки типа string в C++ не поддерживают прямое изменение символов по индексу.

    • @яйцопожаренное
      @яйцопожаренное 9 месяцев назад

      все работает, ты с чем-то путаешь

    • @vada322
      @vada322 9 месяцев назад

      @@яйцопожаренное если написать как у него( то есть с частью когда С и С++) да, но если ты напишешь только часть когда С++ то нет

    • @яйцопожаренное
      @яйцопожаренное 9 месяцев назад

      ​@@vada322 строки типа std::string в C++ поддерживают прямое изменение символов по индексу и даже поддерживают изменение своего размера (длины)

    • @ЭльвираСадыкова-э7г
      @ЭльвираСадыкова-э7г 3 месяца назад

      Скорее нельзя изменить значение переменной через ' = ' . а через индекс можно. Повидимому это ссылочный тип

  • @SayXaNow
    @SayXaNow 6 месяцев назад +1

    судя по чудовищному количеству неточностей и откровенной ложной информации, чел вообще не знает С++. и за подобное гуано он еще и деньги берет в платных курсах? жесть.

  • @damirasanov8993
    @damirasanov8993 Год назад

    первый

  • @Eragod
    @Eragod Год назад

    e

  • @gmadjyern
    @gmadjyern 7 месяцев назад

    Чел, слишком много воды. Зачем мне знать как это работает на языке С если я С++ изучаю?

  • @ЯковЛазоренко
    @ЯковЛазоренко 11 месяцев назад

    Про работу со строками ничего нет, плохо.