Тёмный
No video :(

strlen c++ реализация. Посчитать количество символов в строке c++ ДЗ#11 

#SimpleCode
Подписаться 369 тыс.
Просмотров 98 тыс.
50% 1

Понравилось видео или оказалось полезным? Подпишись!
Разбор домашнего задания.
Написать свою реализацию функции strlen
посчитать количество символов в строке
Исходный код topic-1...
Уроки по программированию
Наша группа ВК smplcode
Подписывайтесь на канал / @simplecodeit

Опубликовано:

 

19 авг 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 255   
@user-io9iq2di4w
@user-io9iq2di4w Год назад
Если у вас visual studio 2019 и выше, то просто везде добавляйте const в начало, когда встречается char. Так будет работать точно. Пример сделанного дз на версии MSV 2022: int Lenght(const char* str) { int counter = 0; while (str[counter] != '\0') { counter++; } return counter; } int main() { const char* str = "hello world"; cout
@Ame_qw
@Ame_qw 8 месяцев назад
Хочу спросить у вас, если вы более опытный программист, чем я, в таких ситуациях по сути можно использовать без детерминирующего нуля, если сделать без! ='0', то программа работает также, но наверное всё равно стоит его писать
@user-io9iq2di4w
@user-io9iq2di4w 8 месяцев назад
@@Ame_qw Честно говоря, не особо понял, как тут можно построить прогу без детерминирующего нуля. Только если указать индекс при котором цикл завершится. (спасибо, конечно, но я вообще не опыытный программист)
@roockeet3460
@roockeet3460 Месяц назад
можно char str [] = "Hello"
@user-vf2sr7vq8n
@user-vf2sr7vq8n 4 года назад
В Visual Studio 2019 пример не реализовать. Константную char нельзя использовать для инициализации сущности char. Поэтому вместо char* str подходит char str[ ] .
@andreyvolkov3117
@andreyvolkov3117 4 года назад
Спасибо!
@SaffronChipMCPE
@SaffronChipMCPE 4 года назад
Благо у меня 2017
@epsilon.sw_
@epsilon.sw_ 4 года назад
Можно через getline ввести данные в char, а перед этим создать указатель на область динамической памяти типа char. Иначе это как изменять размер статического массива
@SaffronChipMCPE
@SaffronChipMCPE 4 года назад
@@epsilon.sw_ я не знаю, как вывести через cin, но так я знаю, что есть функция getline для полобного рода вещей
@epsilon.sw_
@epsilon.sw_ 4 года назад
@@SaffronChipMCPE cin >> (имя переменной); В первых видео в этом плейлисте рассматривалось. Работает только с консолью, а на счёт как работает getline я не знаю. А также для этого требуется подключить библиотеку iostream.
@SimpleCodeIT
@SimpleCodeIT 7 лет назад
#strlen #строки #указатели #SimpleCode #урокипрограммирования
@user-sx4gr8uk5h
@user-sx4gr8uk5h 6 лет назад
void func(char *string) { int quantity = 0; for (int i = 0; ; i++) { if (string[i] != '\0') { quantity++; } else { break; } } cout
@linterrupt
@linterrupt 5 лет назад
@@user-sx4gr8uk5h заморочено, так лучше void func(char *string) { for (int i = 0; ; i++) { if (string[i] == '\0') { cout
@Vlad_Logvin
@Vlad_Logvin 4 года назад
зачем вообще писать в while str[counter]!='\0'? Можно же просто написать str[counter] и оно будет это воспринимать как bool. Если существует - зайдёт, если нет, то нет int strLength(char *str) { int counter=0; while(str[counter]) counter++; return counter; }
@Nyamchik-0_0
@Nyamchik-0_0 4 года назад
Как то так получилось)___смотрю не 1 я такой)хд int MyStrLen(char *str) { int size=0; for (int i = 0 ;; i++) { if (str[i] == '\0') { size = i; break; } } return size; }
@user-yg8mt9fy8l
@user-yg8mt9fy8l 3 года назад
@@Vlad_Logvin Это тоже самое, что и выбор между GetName и get_name, оба варианта верны, нужно просто выбрать какой тебе больше нравится
@Magomedrasul7
@Magomedrasul7 6 лет назад
Большое спасибо автору )) ваши уроки для меня самые понятные во всем ютьюб. Когда-ни-будь стану профессиональным прогером и отблагодарю материально ))
@archiechellaut9483
@archiechellaut9483 3 года назад
Большое спасибо вам за урок и прекрасное пояснение, Сергей!
@user-on2nb5fl8p
@user-on2nb5fl8p 2 года назад
Как Вы объясняете! Учитель,браво.👍👍👍
@artshev1677
@artshev1677 4 года назад
int main() { char str[]="simplecode"; int count = (sizeof(str)/sizeof(str[0]))-1; cout
@user-wm5rx2pv6w
@user-wm5rx2pv6w 4 года назад
+++ тоже так сделал))
@nubozxc7385
@nubozxc7385 2 года назад
Ага, только это должен быть указатель на строку а не сама строка. Если брать условие автора.
@user-of7od3is1p
@user-of7od3is1p 3 года назад
Вариант реализации через цикл for и if void Strl(const char* string) { for (int i = 0; ; i++) { if(string[i]=='\0') { cout
@bebe558812
@bebe558812 2 года назад
int myStrlen(char* str) { for (int i = 0; ; i++) if (str[i] == '\0') return i; } у меня также получилось
@user-vp9cu8kj2c
@user-vp9cu8kj2c 2 года назад
так еще проще) int strLength(const char* str) { int i = 0; for (; str[i] != '\0'; i++){} return i; }
@osvab000
@osvab000 4 года назад
Для 17 версии будет правильно по другому: int main() { char str [] = "Hello"; cout
@leekerschannel
@leekerschannel 4 года назад
const char* str = "hello"; cout
@joja9413
@joja9413 4 года назад
spasibo
@SaffronChipMCPE
@SaffronChipMCPE 4 года назад
Пфффф char str[256]; cin>>str; cout
@avengeranubis
@avengeranubis 2 года назад
char *str = new char[]{"hello"};
@Deonnisiy
@Deonnisiy 6 лет назад
Как уже писали раньше в новом VC программа из данного урока не работает не работает, теперь чтобы компилятор не ругался нужно присваивать строку "const char *string =", и в прототипе функции писать тоже с "const". PS А я через рекурсию сей пример замутил, но у автора изящнее получилось, я лично while не люблю, больше for использую поэтому и не подумал что такой цикл красивей будет...
@user-kz8pw3qf6i
@user-kz8pw3qf6i 6 лет назад
Включи #include , а вместо типа char пиши string без *, и все будет работать.
@Deonnisiy
@Deonnisiy 6 лет назад
Блин, давно это было, я его уже потер. Сейчас уже зная "правильный ответ" не хочется вспоминать. Но как где то читал, любую реализацию рекурсией можно сделать на циклах и наоборот. Просто в одном случае будет красивее рекурсия в другом цикл... Тут важно определить условия сработки условия рекурсии
@Deonnisiy
@Deonnisiy 6 лет назад
Смотрю, но ушел не очень далеко, во первых лето, во вторых отпуск, часть вещей я уже знал и повторял пройденное, и получал дополнительную информацию которую сам не нарыл либо упустил. Сейчас завис на перегрузке операций в классах, тема очень интересная но без понимания практического применения весьма пресная и для меня тугая в освоении такая личная особенность не знаешь полезность становится скучно. Вообще освоение языка без практического применения вещь бесполезная т.к. без практики забывается. Мне интересно в приложении в программировании Ардуино, икал информацию по работе с массивами, нашел эти уроки, начал с основ... Тормозит нехватка знаний как по языку так и применительно к "железу" Огорчает отвратительный компилятор у Ардуино. Вижуалстудия просто сказка по сравнению с ним. Нашел приблуду которая вроде как позволяет создавать проекты под Ардуино но пока не хватает времени, лето коротко, дел много...
@user-hb6ys1zq5t
@user-hb6ys1zq5t 5 лет назад
Спасибо, помог
@elemantro5257
@elemantro5257 4 года назад
int strLeng(const char *string) { int length = 0; for(length;string[length] != '\0';length++){} return length; } я тоже больше люблю for, но не обязательно чтобы в теле цикла чтото происходило,это спокойно компилируется
@Firuz26
@Firuz26 7 лет назад
Спасибо
@magamedmirzoev1408
@magamedmirzoev1408 Месяц назад
Можно ещё так: int foo (const char*a) { int count = 0; for (int i = 0; a[i] != '\0'; ++i) { ++count; } return count; } int main() { const char *str = "Hello"; std::cout
@CoolbitsVDA
@CoolbitsVDA Год назад
Большое СПАСИБО Сергею за его уроки! Сделал ДЗ за минуту :) int myStrlen(char str[]) { int n(0); while (str[n] != '\0') { n++; } return n; } int main() { char str[] = "World!"; cout
@user-oo7kw3jj2t
@user-oo7kw3jj2t Год назад
void StringLen(const char *str) { for (int i = 0; i>=0; ) { if (str[i] == '\0') { cout
@user-kz9rz5wc6i
@user-kz9rz5wc6i 11 месяцев назад
void letterscount(const char *str) { int j = 0; for (int i = 0; str[i] != '\0'; i++) { j++; } cout
@bulba1995
@bulba1995 2 года назад
Я как обычно намудрил в ДЗ написал много всего ненужного, а все как обычно гараздо проще )
@user-uh6qb4sg6b
@user-uh6qb4sg6b Год назад
а можно дз с библиотекой. нужно написать программу библиотека - Написать программу 'библиотека'. Меню консольное, т.е. пользователю предлагается выбрать пункт, с которым он будет работать. Например: Введите 1 чтобы вывести все книги Введите 2 чтобы внести нового читателя И т.д. Программа должна уметь 1. Выводить доступные в библиотеке книги 2. Выводить всех читателей 3. Искать книгу или читателя 4. Добавлять книгу 5. Добавлять читателя 6. Выдавать и возвращать книгу читателю 7. Смотреть какие книги есть у читателя мучаюсь с этим заданием или подскажите примерно что делать
@aska1218
@aska1218 Год назад
Суть функции написал сразу верно, а вот с синтаксисом пришлось повозиться)
@eldorado7566
@eldorado7566 6 лет назад
всё так просто оказалось , а я 15 минут голову ломал=(
@usersktv
@usersktv Год назад
ВНИМАНИЕ любознательным. Для того, чтобы всё было как в видео и не было надобности везде указывать const, используйте: char str[] = { "hello world" }; Вся соль в скобках { } P.S работает всё абсолютно идентично.
@shokweiv
@shokweiv Год назад
И чем эта запись отличается от записи char str[] = hello world"; ?
@usersktv
@usersktv Год назад
@@shokweiv visual studio будет ругаться на записать без const.
@shokweiv
@shokweiv Год назад
@@usersktv не не будет) тут дело в том что создавая массив символов через стандартный синтаксис ( char arr[] = "qwe"; ) ты создаёшь массив символов которые ты можешь менять ( arr[1] = 'r'; ) а создавая масив символов через указатель ( const char *arr = "qwe"; ) ты по сути дела создаёшь в оперативной памяти константную строчку qwe КОТОРУЮ НЕЛЬЗЯ МЕНЯТЬ так как это константный строковый литерал (если навестись мышкой в вижуалке то тебе напишет что-то вроде: (const char[4])"qwe" )
@shokweiv
@shokweiv Год назад
именно поэтому вижуалка ругается и заставляет писать именно const char *arr = "qwe"; кстати может сложиться мнение что это не массив КОНСТАНТНЫХ неизменяемых символов а самый обычный так как мы можем туда что-то записать ( arr = "qwerty"; ) однако как мы помним из уроков про статические массивы память под них выделяется строго при компиляции программы и не может быть в последствии расширена (мы можем сделать только так: const int size = 3; char arr[size] = "qwe";)
@shokweiv
@shokweiv Год назад
это значит что наш массив занимает строго 3 элемента, не более, а значит записать что-то в четвёртый мы просто не сможем - мы залезем в чужую память с const char *arr = "qwe"; ровно та же самая ситуация, однако всё же мы можем сделать arr = "qwerty"; магия? нет) просто на самом деле при попытке написать в коде arr = "qwerty"; программа создаёт в памяти ещё один константный строковый литерал (причём не в ходе выполнения программы а заранее, при компиляции) таким образом мы будем иметь в оперативке сразу две строки "qwe" и "qwerty", причём АДРЕС первой мы потеряем так как указатель arr будет указывать теперь на первый символ строки "qwerty"
@ssdf912
@ssdf912 3 года назад
Вот еще один вариант решения в копилку, со смещением указателя int strLength(const char* string) { int length = 0; while (*string++) { length++; } return length; }
@ooohimark
@ooohimark 2 года назад
блин, это самое крутое решение
@vold3x628
@vold3x628 Год назад
Вот моё решение. Всё вроде работает, но если что-то тут не так, знающие, отпишите: int StrLength(const char *str) { int a = 0; for (int i = 0; i < str[a]; i++) { a++; } return a; } void main() { const char *str = "Hello"; cout
@saml3x234
@saml3x234 Год назад
Возможно кому-то будет ползно: size_t strlenchik( const char* str ) { size_t length = 0; while ( *str != '\0' ) { ++length; ++str; } return length; } int main() { const char* str = "TOP"; cout
@LenTos1337
@LenTos1337 6 лет назад
Насколько я понимаю, сейчас библиотеки обновили, и такая реализация не сработает. Я просто принимал в функцию sizeof нашего char массива, и отнимал от него единицу, вот вам и strlen, однако инетересно, по какому принципу работает функция strlen
@dimasavukov6230
@dimasavukov6230 6 лет назад
sizeof на символьные динамические массивы не прокатывает
@user-bb1nk1po5e
@user-bb1nk1po5e Год назад
привет из 2023. Спасибо большое за уроки!"
@roflstea3394
@roflstea3394 5 лет назад
Покривоватей сделал, но работает! Спасибо)) int countSymblols(char *string) { int lol = 0; for(int i=0;string[i]!='\0';i++) { lol=i; } return lol+1; }
@roflstea3394
@roflstea3394 5 лет назад
:D
@KraionixX
@KraionixX 4 года назад
//ДЗ 11 ПОСЧИТАТЬ КОЛИЧЕСТВО СИМВОЛОВ В СТРОКЕ #include using namespace std; void strlenn(string* str) { cout
@agentina0
@agentina0 2 года назад
она у тебя пробелы не считает
@chelovechek7773
@chelovechek7773 2 месяца назад
спасибо!
@user-ft4bm8nh8e
@user-ft4bm8nh8e 4 года назад
void foo (string str) { int b = str.size(); cout
@ivan_kirsanov
@ivan_kirsanov Год назад
Вариант из видео созданию строки не работает. Может из-за новых версий IDE, но без const не пашет. Не работало, пока везде const не впиндюрил: const char *str = "Hello, world!"; А в функции только в таком варианте принимало эту строку: int str_len(const char * const str)
@user-kz8pw3qf6i
@user-kz8pw3qf6i 6 лет назад
Тему "фигурных скобочек" хорошо было бы дополнить в видео, где разбираются условия, циклы и подобные вещи, а так спасибо)
@safocl9768
@safocl9768 5 лет назад
и я вот все думаю, что все таки нужно для таких переменных, которые используются для подсчета количества чего-то использовать тип unsigned int вместо простого int.
@user-uj4gr9ql4m
@user-uj4gr9ql4m Год назад
не всегда, например посмотрите на сценарии возврата -1 в подобных функциях
@viper_0097
@viper_0097 7 месяцев назад
На самом деле цикл while тут излишен, ведь сам процесс напоминает перебор, а перебором у нас занимается for: int len(const char* str) { int i; for (i = 0; str[i] != '\0'; i++); return i; } Всего три строчки, зато намного проще. К слову, можно ещё убрать i=0 и записать вне цикла.
@sleepyNovember_project
@sleepyNovember_project 6 месяцев назад
Дело реализации, кому как по приколу
@viktorthyganchuk8710
@viktorthyganchuk8710 5 месяцев назад
Я через сайзоф сделал, вроде работает, ошибок не вижу. Последняя строка для сравнения. void main() { char str[] = "Hello World!!"; int length = sizeof(str) - 1; cout
@sleepyNovember_project
@sleepyNovember_project 5 месяцев назад
@@viktorthyganchuk8710 прикольно, но для динамического массива чаров ( const char* str = new char[]; ) Так не прокатит)))
@viktorthyganchuk8710
@viktorthyganchuk8710 5 месяцев назад
​@@sleepyNovember_projectсогласен, с динамическим не працуе(
@viper_0097
@viper_0097 5 месяцев назад
@@viktorthyganchuk8710 ошибки нет, но, если не ошибаюсь, то если будет передаваться как параметр в функцию этот массив чаров, то sizeof не будет работать и будет выдавать размер указателя
@zumaxrussia
@zumaxrussia 6 лет назад
с циклом for как я понимаю, трудности возникают именно из за счетчика, который тип int и адекватно, посчитать символами, цикл не сумеет)
@MuratNurkassimov
@MuratNurkassimov 5 лет назад
int CountChar(char Str[]) { int result = 0; for (int i = 0; i < strlen(Str); i++) { result++; } return result; }
@pubgr862
@pubgr862 5 лет назад
Murat Nurkassimov зачем использовать функцию подсчета строки в функции подсчета строки???
@ahmadum
@ahmadum 4 года назад
@@pubgr862 ахахахахах
@user-td5mr8nv2u
@user-td5mr8nv2u 4 года назад
Сергей, спасибо за уроки! Программа работает не верно, если в символах есть пробел(считает только до пробела)...Как можно исправить? #include using namespace std; void strLength(char*& str, int &counter) { while (str[counter] != '\0') { counter++; } } void main() { setlocale(LC_ALL, "Rus");//Включение русского языка в консоли int counter = 0; char *str = new char[10]; cout > str; strLength(str,counter); cout
@user-vf2sr7vq8n
@user-vf2sr7vq8n 4 года назад
Хотя, если в мэйне тоже поставить const, то тогда работает через указатель.
@chap_01
@chap_01 3 года назад
Прекрасное объяснение.
@mr.warpunch6007
@mr.warpunch6007 2 года назад
Спасибо!
@anbur9197
@anbur9197 4 месяца назад
А эта домашка будет попроще той с функциями обработки динамических массивов
@antonioi2738
@antonioi2738 4 года назад
Кстати работает и без проверки на нуль-терминатор, я сделал цикл на проверку логического нуля. Пока str [ i ] равно true (любое отличное от нуля значение). И по достижению конца строки цикл увидит ноль, т.к. по сути \0 это нулевое значение в ASCII int how_long(const char* str) { int i = 0; while (str[i]) i++; return i; }
@krouvy469
@krouvy469 4 года назад
Очень изящное решение.
@ivan_kirsanov
@ivan_kirsanov Год назад
У меня вот так вот получилось функцию реализовать: int str_len(const char * const str) { int len{ 0 }; for (int i = 0; str[i] != '\0'; ++i) { len++; } return len; }
@sleepyNovember_project
@sleepyNovember_project 6 месяцев назад
Прекол в том, что у объекта класса "string" и так есть функция с буквально таким же названием std::string uslsstr; std::cout
@Diner23
@Diner23 6 лет назад
Здравствуйте. Очень полезные уроки. Я азы буквально за день освоил. Не могли бы вы подсказать в каком уроке показываете нахождение кол-ва четных и нечетных элементов массива?
@SimpleCodeIT
@SimpleCodeIT 6 лет назад
Здесь логика проверки на чётность, но без массивов. ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-YbWMlAx7PW0.html
@shaa8193
@shaa8193 6 лет назад
int i; cin >> i; if (i % 2 == 0) { cout
@shaa8193
@shaa8193 6 лет назад
или с помощью массива: int counter = 0; int i[] = {23,5,1,24,11,2,10,22}; do{ for (int j = 0; j < sizeof(i) / sizeof(int); j++){ if (i[j] % 2 == 0) { cout
@jsgaming9839
@jsgaming9839 5 лет назад
И тут опачки.. В 10 строке компилятор выдаст ошибку. Потому что в стандарт 11/14 класс std::string добавили люди, которых по-видимому с позором выкидывали с экзаменов с жирной двойкой в зачетке. А вот НЕТ в std::string оператора const char *. Соответственно strlen пошлет такой код лесом. Работали то титаны мысли, писавшие std::string и утверждавшие стандарт. Они не в курсе что существует такое понятие как "читабельность кода", на которую в том числе влияет объем кода (исходника). Поэтому вместо того, чтобы сделать оператор const char * они добавили функцию c_str(). Теперь ждем функцию get_8bit_character_by_index() вместо оператора []. И вообще, глядя на реализацию string в С++ 11/14 хочется плеваться долго и смачно, а создателям класса сломать пальцы чтобы больше не программировали. А урок, Сергей, как всегда хороший.
@quidoorotti3728
@quidoorotti3728 5 лет назад
И так сойдет :D int symbol = -1; int space = 0; int backspace = 0; char delsym = '\b'; char Symbol = 'r'; cout
@KoTiKo43
@KoTiKo43 11 месяцев назад
Я сделал так int lenstr(const char *strArr) { int counter = 0; while (strArr[counter]) { counter += 1; } return counter; }
@slimbdeful
@slimbdeful 6 лет назад
А у меня после объявления char* str="Helloo"; компилятор пишет "Значение типа const char* нельзя использовать для объявления сущности типа char*". И не компилирует.. Что делать ?
@xrustik4948
@xrustik4948 6 лет назад
библеотек обновили
@metalhead-mh1864
@metalhead-mh1864 3 года назад
Я только после просмотра видео понял что надо было делать
@Sibir-bv2hp
@Sibir-bv2hp 5 лет назад
Сделал
@VeloVetal
@VeloVetal 3 года назад
длина строки в байтах: -------------------------------------------------------------------------------- inline size_t fast_strlen ( const char* s ) { size_t dummy, res; asm ( "repne scasb" : "=&c" (res), "=&D" (dummy) : "1" (s), "a" (0), "0" (-1LL) : "cc", "memory" ); return ~res - 1; } -------------------------------------------------------------------------------- подсчёт количества символов для utf-8 строки: -------------------------------------------------------------------------------- inline size_t utf8_charCount ( const char* s ) { size_t Count; asm ( "xor %0,%0;" "1:" "dec %0;" "2:" "lodsb;" "shl $1,%%al;" "js 1b;" "jc 2b;" "jnz 1b;" : "=&r" (Count) : "S" (s) : "cc", "memory", "%rax" ); return ~Count; } --------------------------------------------------------------------------------
@dmitrouwdmitrowowich558
@dmitrouwdmitrowowich558 Год назад
У меня получилось реализовать эту функцию по другому, но почему то она работает только с английскими символами. Я сам до конца не понимаю почему, может кто то знает. Код функции: void foo(char* str) { int i = 0; for ( ; i < str[i]; i++) { } cout
@m1rage505
@m1rage505 Год назад
может потому что твоя функция возвращает void?
@user-kb6qd8rg4g
@user-kb6qd8rg4g 4 года назад
спасибо
@lovv6669
@lovv6669 3 года назад
Ярик дарова
@user-kb6qd8rg4g
@user-kb6qd8rg4g 3 года назад
@@lovv6669 Ну дарова
@ivan_kirsanov
@ivan_kirsanov Год назад
А можно еще и вот так 🙂 int str_len(const char * const str) { int len{0}; for (len; str[len] != '\0'; ++len) {} return len; }
@viktort9326
@viktort9326 3 года назад
"Маленькое западло" :))))))
@Den-te1nd
@Den-te1nd 4 года назад
в VS 2010 Ваш код не работает.....Выводит первую букву в консоль и все.....Поэтому сделал по-своему cделал через подсчёт символов строки: int Func (string str) { return str.length(); } void main() { string a = "Hello"; int r = Func (a); cout
@boshkaoff
@boshkaoff Год назад
int couter(string a) { int temp = 0; while (a[++temp] != '\0'){} return temp; } ещё так работает
@Quazaru
@Quazaru 5 лет назад
сout
@jangiryanarsen4952
@jangiryanarsen4952 6 лет назад
Последний апдейт Visual Studio 2017 версии 15.5.0 отбрасывает мусор,без терминирующего. Обман не удался! Остается проверить на Mac Pro(XCode 9.2-последний апдейт).
@light2night
@light2night 3 года назад
Я сделал так: int Len(char* str) { int n = 0; while (str[n] != '\0') { n++; } return n; } int main() { char str[] = "Hellow World!"; std::cout
@user-of8lu3xe7j
@user-of8lu3xe7j 5 лет назад
А если в символах будет \ то программа не учитывает этот символ
@hermanivaschenko6499
@hermanivaschenko6499 5 лет назад
#include using namespace std; // Написать функцию со свойсвами strlen(); int FoOne(const char *str) { return strlen(str); } //////////////////////// void FoTho(const char *str) { int tik = 0; // счётчик итерации истиности for(int i= 0;;i++) { if (str[i] != '\0') // условие проверки каждого элемента массива символьного типа до момента терминирования { tik++; } else //условие остановки итератора { break; } } cout
@ifelse9664
@ifelse9664 5 лет назад
Все это можно написать гораздо короче: int Strlen(const char *str) { int i = 0; while (str[i++] != 0); return i; } - здесь нет никакой ошибки, просто используется свойство цикла while
@kaka9ipazhu672
@kaka9ipazhu672 4 года назад
@@ifelse9664 тогда уже while (str[++i] != 0) ибо в вашем примере на выходе на 1 символ больше показывает :)
@xvostbobra
@xvostbobra 8 месяцев назад
У меня у одного при написании этого кода: char* str = "Hello"; выводится ошибка?
@viper_0097
@viper_0097 7 месяцев назад
Добавь const перед char. В новых версиях VS так писать уже нельзя.
@xvostbobra
@xvostbobra 7 месяцев назад
@@viper_0097 спасибо
@Shuvooga
@Shuvooga Год назад
Не знаю почему, но когда я пишу char *str = "Hello";, то мне говорит, что инициализация: невозможно преобразовать "const char [25]" в "char *" так что я пишу char str[] = "";
@sleepyNovember_project
@sleepyNovember_project 6 месяцев назад
const char* wtf = "text";
@user-ty4nc7fk5q
@user-ty4nc7fk5q Год назад
А как решить эту задачу так, чтобы пользователь с консоли мог вводить строчку, и мы считали ее длину?
@user-cj3mf6sg4e
@user-cj3mf6sg4e 2 года назад
А как сделать так чтобы функция считала только числа, а буквы пропускала?
@user-ye7vc6ug1l
@user-ye7vc6ug1l 5 лет назад
Спсб
@wwRtd
@wwRtd 10 месяцев назад
А как можно реализовать ту же задачу, но для строки произвольного размера? Если строки - это массивы char'ов, то можем ли мы работать с динамическими строками или мы лишены такой роскоши?
@jija5121
@jija5121 9 месяцев назад
cout только не обязателен в numofchar
@sleepyNovember_project
@sleepyNovember_project 6 месяцев назад
stringname.length(); / stringname.size(); Для std
@avantazh55
@avantazh55 4 года назад
У меня почему-то в строке char *str = "Hello"; "Hello" - подчеркнуто красной волнистой линией и компилятор пишет: значение типа "const char*" нельзя использовать для инициализации сущности типа "char*". Что это значит и как от этого избавиться? Код полностью скопирован с прошлого урока. Хотя проблему решил другим способом: void main() { setlocale(LC_ALL, "Rus"); string ss; cout
@xwnx5970
@xwnx5970 4 года назад
Олег, скорее всего это из-за того, что у тебя новая версия Visual Studio. Я тоже столкнулся с этой проблемой, но решил её более лёгким путём. В функции(не main)в параметрах приписал константное значение char'а и также приписал константное значение переменной char в функции main. 1- int foo(CONST char* str) 2- CONST char* str = "Hello";
@avantazh55
@avantazh55 4 года назад
@@xwnx5970 Спасибо
@Magomedrasul7
@Magomedrasul7 6 лет назад
Вот как я реализовал ).. int len(const char str[]) { int count = 0; while (true) if (str[count++] == '\0') return count-1; }
@naikvitlich1093
@naikvitlich1093 5 лет назад
Почти так же но с помощью счетчика Count void strglenght(int &count,char *string) { for (int i = 0; i < 1;) { count++; int a = count; if (string [a] =='\0') { i++; } } }
@user-jl5du8fz5o
@user-jl5du8fz5o 4 года назад
Минимализм Си во всей красе! int Lenght_string(char str[]){ int i = 0; while (str[i++] != '\0'); return --i; } int main() { char str[] = "Hello"; cout
@steshapokosova1775
@steshapokosova1775 3 года назад
Все считает int StrLen(const char* String, int index = 0) { while (String[index] != '\0') { String[index]; index++; } return index; }
@user-wf1te6wu7b
@user-wf1te6wu7b 4 года назад
Ну получилось как-то так #include #include using namespace std; int FOO(string arr) { int a=0; char b = '\0'; while (arr[a]!=b) { a++; } return a; } void main() { setlocale(LC_ALL, "Ru"); string arr; cout arr; cout
@ooohimark
@ooohimark 2 года назад
не работает)
@sunmaxplay6491
@sunmaxplay6491 3 года назад
мой вариант решения int strlen_me(char *str) { for (int i = 0; ; i++) { if (str[i] == '\0') { return i; } } return 0; }
@rustamibrahimli2113
@rustamibrahimli2113 6 лет назад
Я один не смог решить задачу ? Ответьте мне пожалуйста,для меня это важно .Я влюблен в программирование ,но задачи решать не могу (((.Хотя все тут прекрасно понимал ,ну типо что такое цикл и так далее.
@adiletastana2781
@adiletastana2781 6 лет назад
Мне иногда приходилось обдумывать решение несколько дней, так что необходимо стараться. Думаю к любой задаче можно найти решение, если не вы сами то кто-нибудь поможет, главное уметь все это правильно написать
@rustamibrahimli2113
@rustamibrahimli2113 6 лет назад
@@adiletastana2781 я не то что, думаю несколько дней, я просто не могу решить, думаю я как можно, но че то не получается ((
@zumaxrussia
@zumaxrussia 6 лет назад
Та же проблема. Отсутствие практики.Не старайся сразу лезть в гугл. А сначала напиши на бумажке или комментариями, как должна работать программа. Мне помогает. Тоже бывает сидишь и не знаешь с чего начать. А всегда начинай с самого первого вопроса, с чего начинается программа?
@BadDanFeeds
@BadDanFeeds 5 лет назад
@@adiletastana2781 Ты абсолютно неправ. Главное - не "уметь всё это правильно написать", главное - правильно составлять алгоритм. Написать код любой дурак может, который знает синтаксис. А вот составить корректный алгоритм работы программы - ум надо иметь. Это, если сравнить, как диктант и сочинение. Диктант - это что? Это бери да под диктовку пиши, буковки же знаешь. А сочинение - это придумать сюжет, разнообразить его всякими речевыми оборотами, ещё что-то, и уже в последнюю очередь - записать. Так же и в программировании. Понял, что я хотел донести до тебя?
@user-pm5kv1xj3x
@user-pm5kv1xj3x 2 года назад
Получается? Ты до сих пор влюблен в программирование или она тебя бросила?
@Sooderone
@Sooderone 2 месяца назад
🧠
@user-us2tr1us6t
@user-us2tr1us6t 4 года назад
я сделал почти то же самое и могу с уверенностью сказать что char[0]==\0
@user-fh9ry9qv1v
@user-fh9ry9qv1v 4 месяца назад
void foo(const char*& str) { int valuence = 0; for (int i = 0; ;i++) { if (i > str[i]) { goto link; } valuence++; } link: cout
@pispis3617
@pispis3617 7 лет назад
Для тех, кто не знает: "\0" - терминирующий ноль, спец.символ, обозначающий конец строки.
@den1ssss
@den1ssss 7 лет назад
зачем это пистаь7
@justie_adm
@justie_adm 6 лет назад
Вот меня как раз и мучал этот вопрос. Спасибо, что написал))
@inee3713
@inee3713 Год назад
я учусь по вашим урокам и параллельно читаю учебник, но не могу пока понять, как заставить функцию(и стандартную в том числе) посчитать "пробел", как первый и единственный символ в строке. Имею в виду вот это char string [ ] = { ' ', '\0'};
@user-yd2wm6gt5k
@user-yd2wm6gt5k Год назад
int foo(char string[]) { int i = 0; while(string[i]!='\0') { i++; } return i; }
@user-yd2wm6gt5k
@user-yd2wm6gt5k Год назад
стандартная тоже нормально работает.Жаль sizeof работет через жопу...
@inee3713
@inee3713 Год назад
@@user-yd2wm6gt5k не, не, не, Игорь, я не это имел в виду. Моя вина, написал не точно свой вопрос. Имелось в виду на этапе cin>>string; Думал поможет такая запись, - gets_s(string); или cin.getline; ан нет((
@inee3713
@inee3713 Год назад
@@user-yd2wm6gt5k при попытке вписать один "пробел" и отправить его в cin далее нажав enter, программа ждёт от меня ввода
@catgo_cat
@catgo_cat 4 дня назад
int strlen_(char *str) { int counter = 0; for (;str[counter] != '\0';counter++); return counter; }
@kingofbattleonline
@kingofbattleonline 3 года назад
size_t _strlen(const char* _chars) { size_t result = 0; for (unsigned int index = 0; _chars[index] != '\0'; ++index) result++; return result; }
@user-hk2jk3nx4x
@user-hk2jk3nx4x Год назад
int length_string(const char* str) { for (int i = 0; ; i++) { if (str[i] == '\0') { return i; } } }
@mishanyatv1178
@mishanyatv1178 5 лет назад
Вот мой код, и он почему-то не работает. Но если написать char const * qwerty то все работает, обьясните мне разницу пж, в чем суть слова const в моем случае... #include using namespace std; int srt(char *qwerty) { int fsda = 0; while (qwerty[fsda] != '\0') { fsda++; } return fsda; } void main() { char *qwerty = "wrgwbwg"; cout
@gamerov3180
@gamerov3180 5 лет назад
Выше уже писали люди, библиотеки обновили и теперь запись "char *str =" не работает, нужно писать "const char *str ="
@waparabka
@waparabka 5 лет назад
int func(char *string) { int i = 0; while(string++ != 0) i++; return i; }
@TheWladberlin
@TheWladberlin 4 года назад
а ты ноль ждешь или '\0' - окончание стринга ? И string++ - ??
@dmitrynonsons5253
@dmitrynonsons5253 11 месяцев назад
void howmanysymbols(const char* str) { int numbers = 0; for (int i = 0; str[i] ; i++) { numbers++; } cout
@Viamsupervadetvadens
@Viamsupervadetvadens 6 лет назад
up
@besikimeladze4374
@besikimeladze4374 5 лет назад
пишет ошибку char *str = "Hello"; a value of type "const char *" cannot be used to initialize an entity of type "char *"
@truedeveloper7422
@truedeveloper7422 4 года назад
В новых версиях VS нужно писать не char *str, а const char *str.
@user-iv6fm9nv8w
@user-iv6fm9nv8w 3 года назад
const char * str = "hello";
@decker08
@decker08 2 года назад
С Юникодом не сработает.
@simongreyse4171
@simongreyse4171 5 лет назад
почему компилятор принимает 2 символа "\" и "0" как один символ в ячейке массива?
@andrewahashkov5585
@andrewahashkov5585 5 лет назад
Таблицу ASCII смотри
@simongreyse4171
@simongreyse4171 5 лет назад
@@andrewahashkov5585 посмтотрел. 0 это 48, \ это 92. и что?
@user-uj7ct7dw8c
@user-uj7ct7dw8c 5 лет назад
@@simongreyse4171 "\0" = терминирующий ноль,показывает конец строки.
@simongreyse4171
@simongreyse4171 5 лет назад
@@user-uj7ct7dw8c ты понимаешт что это ДВА символа? как они помещаются в 1 ячейку?
@alexeyprofit5911
@alexeyprofit5911 5 лет назад
@@simongreyse4171, компилятор воспринимает как один
@tishegrad
@tishegrad 4 года назад
люблю делать западло своей программе...
@user-uk2hq9jg3l
@user-uk2hq9jg3l Год назад
а если нужно узнать скольно слов в строке
@RrRrRrRroman
@RrRrRrRroman Год назад
надо сделать подобный цикл, только с поиском символов "пробел" и поставить на него цикл счётчика
@HessW
@HessW Год назад
Можешь посмотреть ASCII код лоя пробела и искать его
@Isturfore
@Isturfore 5 месяцев назад
Ну какой я даун ну как до этого можно было не догадаться
@Isturfore
@Isturfore 5 месяцев назад
int StrLen(const char* str) { int counter = 0; for (; str[counter] != '\0';) { counter++; } return counter; }
@nailtagiyev6340
@nailtagiyev6340 5 лет назад
Мой лайк 666-ой
@simongreyse4171
@simongreyse4171 5 лет назад
почему не с помощью sizeof?
@gamerov3180
@gamerov3180 5 лет назад
Sizeof на динамический символьный массив немного иначе работает, попробуй сам, не получится
@davidkroods811
@davidkroods811 6 лет назад
ошибка у меня в char *str ="Helo"; поскольку "Hello" это константа а char *str тип char а не const char
@user-rm3eu6we8c
@user-rm3eu6we8c 6 лет назад
добавь впереди const - заработает,
@sviatoidyx4672
@sviatoidyx4672 2 месяца назад
int lenstr(char* masiv) { int i = 0; while (masiv[i] != '\0') { i++; } return i; }
@alexoper832
@alexoper832 3 года назад
если вводить строку с пробелами, то измеряет только длину первого слова
@QWERTY-nm1pi
@QWERTY-nm1pi 3 года назад
Потому что ты написал говно программу
@alexoper832
@alexoper832 3 года назад
@@QWERTY-nm1pi проверял?
@QWERTY-nm1pi
@QWERTY-nm1pi 3 года назад
@@alexoper832Сделал выводы из твоего комментария. Во-первых строки заканчиваются нулевым символов ,а не пробелом. Во-вторых пробел это тоже символ.
@alexoper832
@alexoper832 3 года назад
@@QWERTY-nm1pi когда я переписал код автора, то возникла проблема о которой я и написал, мой код сработал нормально
@apelsin3001
@apelsin3001 6 лет назад
А вот так можно ? while(*(string+i)){ i++; }
@ruslandad365
@ruslandad365 3 года назад
АюХ!!! Ты че натворил???
@user-jc5ci3kt1g
@user-jc5ci3kt1g Год назад
Почему код не запускается если не написать const перед char?
@n3onn439
@n3onn439 Год назад
в более современных версиях C++ инициализация строкой символов (C-style строками) должна выполняться с использованием типа const char*, потому что строковые литералы являются неизменяемыми. В старых версиях компиляторов такое присваивание могло быть допустимым, но в современных стандартах C++ это считается неверным.
@ivanuchka007dunduk3
@ivanuchka007dunduk3 4 года назад
cout
@user-oo4zm2co6o
@user-oo4zm2co6o 4 года назад
Нет
@olegbocharnikov950
@olegbocharnikov950 2 года назад
НИЖЕ ИДЕЯ С ВВОДОМ СЛОВА В КОНСОЛЬ
Далее
Я стала богата за ночь
12:04
Просмотров 259 тыс.
Ввод и вывод матриц в c++
7:18
Просмотров 29 тыс.