Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.72/89: Рейтинг темы: голосов - 89, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 09.03.2020
Сообщений: 25

Найти длину строки, без использования функции strlen()

02.04.2020, 13:50. Показов 20086. Ответов 115
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написать функцию, которая получает строку и возвращает длину строки. Без использования функции strlen ()
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.04.2020, 13:50
Ответы с готовыми решениями:

Узнать длину строки не щитая функции strlen
Как узнать длину строки не щитая функции strlen?

Написать программу, которая определяет длину строки - strlen (число символов без завершающего нуль-символа)
Написать программу с помощью символьных строк и функции обработки строк. Библиотечные функции обработки строк: strlen-определить...

Функция strlen возвращает неверную длину строки
#include <iostream> #include <cstring> #include <cstdio> using namespace std; int main () { wchar_t x; char str; ...

115
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
03.04.2020, 17:49
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от IGPIGP Посмотреть сообщение
теперь нельзя написать
Ноль - это соглашение программистов, а не авторов языка
Т.е. если хотите ноль в начале держать - держите Будет ваше личное соглашение.

Добавлено через 4 минуты
Цитата Сообщение от IGPIGP Посмотреть сообщение
а нуля у них в фихическом смысле нет потому, что они контейнеры
Нуля у них нет потому, что далеко не любой тип данных поддерживает наличие такого нуля. Т.е. это свойство вытекает не из свойств контейнера как такового, а из свойств типов данных, которые могут в нем находиться. В общем случае предусмотреть такой "осязаемый" ноль для любых типов - невозможно.
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
03.04.2020, 17:51
Цитата Сообщение от DrOffset Посмотреть сообщение
Ноль - это соглашение программистов, а не авторов языка
я думаю авторы языка тоже были согласны.

Добавлено через 1 минуту
Цитата Сообщение от DrOffset Посмотреть сообщение
В общем случае предусмотреть такой "осязаемый" ноль для любых типов - невозможно.
что нибудь типа value_type, и назвать его null_value
1
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
03.04.2020, 17:51
Цитата Сообщение от _stanislav Посмотреть сообщение
я думаю авторы языка тоже были согласны.
Авторы языка - тоже программисты. Но Си-строка - это не языковой тип данных - я об этом. Поэтому язык, например, не запрещает не писать нуль-терминатор, или наоборот ставить его везде, где требуется.
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
03.04.2020, 17:53
Цитата Сообщение от DrOffset Посмотреть сообщение
Поэтому язык, например, не запрещает не писать нуль-терминатор, или наоборот ставить его везде, где требуется.
как я понимаю, стандартная библиотека функций в язык не входит.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
03.04.2020, 17:55
Цитата Сообщение от DrOffset Посмотреть сообщение
Ноль - это соглашение программистов, а не авторов языка
Это верно. Если не учесть что язык это тоже
Цитата Сообщение от DrOffset Посмотреть сообщение
соглашение программистов
Ведь это особенно верно именно в контексте С-строк. С-строка это соглашение программистов. Оно прячется за типом - указатель на символ. А терминирующий ноль делает его контейнером (для бедных). А мощь библиотек типа string.h и поддержка потоками делает их отдельным типом расширяя допустимые операции (интерфейс типа) так что обычному указателю и не снилось.
Цитата Сообщение от DrOffset Посмотреть сообщение
Т.е. если хотите ноль в начале держать - держите Будет ваше личное соглашение.
Соглащение по с-строкам и контейнерам/итераторам имеет силу стандарта именно потому, что оно поддерживается всеми (добровольно-принудительно).
Сам с собой то я соглашусь. И то не всегда. Когда размышляю и сомневаюсь - я бурно не согласен. Как и любой, кто умеет сомневаться и размышлять.

Добавлено через 1 минуту
Цитата Сообщение от _stanislav Посмотреть сообщение
как я понимаю, стандартная библиотека функций в язык не входит.
std - часть языка. Де-факто все, что обще-принято - часть языка и boost тоже)
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
03.04.2020, 18:01
Цитата Сообщение от IGPIGP Посмотреть сообщение
А терминирующий ноль делает его контейнером
Терминирующий ноль делает его указателем на Си-строку.
А контейнер - это любой массив (в том числе массив символов), даже не являющийся Си строкой.

Например функции send, или write принимают указатель на символ, но при этом не считают его Си-строкой (независимо от того, есть там ноль или нет).
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
03.04.2020, 18:02
Цитата Сообщение от DrOffset Посмотреть сообщение
Нуля у них нет потому, что далеко не любой тип данных поддерживает наличие такого нуля. Т.е. это свойство вытекает не из свойств контейнера как такового, а из свойств типов данных, которые могут в нем находиться. В общем случае предусмотреть такой "осязаемый" ноль для любых типов - невозможно.
Я об этом и говорю. Глядя на то как я объясняю возможную логику устройства контейнеров и природу их отличий от с-строки (пра-пра-контейнера), вы говорите - контейнер таков каков он есть и более ни каков. Именно поэтому у него как такового не может быть того чего у него нет и быть не может. Ибо того что у него нет у него не было ни когда. Я не спорю. Мы по разному видим. А новичку интересно, потому, что он первый раз видит.
Он удивляется.
Я продолжаю удивляться.
Вы согласились и не видите ни чего удивительного.
Но в целом, всё происходящее интересно. Поэтому мы тут и беседуем)
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
03.04.2020, 18:03
Цитата Сообщение от _stanislav Посмотреть сообщение
как я понимаю, стандартная библиотека функций в язык не входит.
В стандартной библиотеке есть функции, которые не считают указатель на char указателем на Си-строку.
Так что наличием функций и такого и такого плана мы только подтвердим тезис о том, что это программистские соглашения, а не языковые.
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
03.04.2020, 18:07
Цитата Сообщение от DrOffset Посмотреть сообщение
Так что наличием функций и такого и такого плана мы только подтвердим тезис о том, что это программистские соглашения, а не языковые.
а если был бы языковой то ввели для byte отдельный тип и пользовались бы byte * для массивов на байт, и сделали char * чисто строковым массивом с нулем?
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
03.04.2020, 18:10
_stanislav, если нужны примеры языковых строк - смотри на паскаль

Все остальные приседания с указателями так и будут оставаться соглашениями.
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
03.04.2020, 18:13
Цитата Сообщение от DrOffset Посмотреть сообщение
так и будут оставаться соглашениями.
а сам язык это не соглашения?
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
03.04.2020, 18:18
Цитата Сообщение от IGPIGP Посмотреть сообщение
оно поддерживается всеми
Цитата Сообщение от IGPIGP Посмотреть сообщение
и boost тоже
Язык C++ так концептуально устроен, что если вам не хватает какой-то возможности - вы можете добавить ее, написав класс.
Так и тут - увековечить ваше соглашение вы можете написав библиотеку, с классами, которые эти соглашения в принудительном уже порядке поддерживают. И с классами этой библиотеки можно будет делать то, что вашими соглашениями предусмотрено. Это именно так работает.
boost ведь так и родился. Кто-то когда-то решил "а ведь было бы удобно!" и все. А теперь люди пишут, что это стандарт )

Добавлено через 2 минуты
Цитата Сообщение от _stanislav Посмотреть сообщение
а сам язык это не соглашения?
Соглашения. Но они же не произвольные. Они поддерживаются компилятором, компилятор их гарант.
Класс std::string - это тоже соглашения, но они описаны этим классом, и он не дает в идеале их нарушить. Тут гарант - класс.
А вот убрать ноль из массива символов вам никто не запретит.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
03.04.2020, 18:22
Цитата Сообщение от DrOffset Посмотреть сообщение
Язык C++ так концептуально устроен, что если вам не хватает какой-то возможности - вы можете добавить ее, написав класс.
Так и тут - увековечить ваше соглашение вы можете написав библиотеку, с классами, которые эти соглашения в принудительном уже порядке поддерживают. И с классами этой библиотеки можно будет делать то, что вашими соглашениями предусмотрено. Это именно так работает.
boost ведь так и родился. Кто-то когда-то решил "а ведь было бы удобно!" и все. А теперь люди пишут, что это стандарт )
Я говорю о то же самое. Но не о том. Я говорил о том, что когда создавали stl предложили набор соглашений не согласующийся с логикой с-строк в части реализации "хвостового" итератора.
Это с целью сделать понятным то, что при первом знакомстве кажется непонятным. Тут всегда есть риск нажить дискуссию с кучей тех кто не нуждается ни в каких объяснениях. Я привык)
0
03.04.2020, 18:27

Не по теме:

IGPIGP, окей :)

0
03.04.2020, 18:34

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
IGPIGP, окей :)
Нормально всё) Разгоаор о том, сколько стоит экономия для единичного в общем контексте, - сам по себе интересен, кстати. Кто писал шаблоны для указателей и задалбывался на специализациях для char* поймут о чем я.

0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,308
03.04.2020, 18:49
Цитата Сообщение от IGPIGP Посмотреть сообщение
Не контейнеры такие, потому что задуманы как непотрагиваемые за ноль, а нуля у них в фихическом смысле нет потому, что они контейнеры а не с-строки...
Современная спецификация методов c_str() и data() не оставляет выбора: нуль там физически есть и хранится он физически непрерывно с остальными элементами строки. Однако исключений из правил пользования итераторным интерфейсом для этого нуля не сделано. Этот ноль там сидит ради С-интерфейса: его вы можете увидеть через голые указатели. Но не через итераторы.

Цитата Сообщение от IGPIGP Посмотреть сообщение
Я говорил о том, что когда создавали stl предложили набор соглашений не согласующийся с логикой с-строк в части реализации "хвостового" итератора.
Когда создавали STL планов немедленной совместимости std::string с C-строками не было вообще. std::string - это не нуль-терминированная строка, это строка с хранимой длиной, которой никакой специальный терминатор не нужен.

К решению все таки хранить замыкающий ноль на постоянной основе пришли только к C++11.

P.S. Это не говоря уже о том, что std::string - это не STL.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
03.04.2020, 18:57
TheCalligrapher, именно это я и имел ввиду. Хотя речь тогда шла о контейнерах как таковых. А строка std::string -отличный пример для иллюстрации того что:
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Когда создавали STL планов немедленной совместимости std::string с C-строками не было вообще.
а потом они появились:
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
К решению все таки хранить замыкающий ноль на постоянной основе пришли только к C++11.
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
P.S. Это не говоря уже о том, что, ЕМНИП, std::string - это не STL.
ЕМНИП STL как термин вышел из употребления и замещён std. Но это не имеет значения в контексте обсуждения)
0
 Аватар для Argus19
1450 / 467 / 78
Регистрация: 24.09.2017
Сообщений: 2,557
Записей в блоге: 24
03.04.2020, 19:17
Так что же именно хранит .begin()? Поиграл с длиной строки с просмотром переменной, которой присвоено значение разименованного .begin().
C++
1
2
long x = *S.begin();
cout << x;
Всегда "-61".
"-61" чего?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,308
03.04.2020, 19:44
Цитата Сообщение от Argus19 Посмотреть сообщение
Так что же именно хранит .begin()? Поиграл с длиной строки с просмотром переменной, которой присвоено значение разименованного .begin().
C++
1
2
long x = *S.begin();
cout << x;
Всегда "-61".
"-61" чего?
Ваш вопрос мало относится к begin().

Попробуйте

C++
1
2
3
char a = 'a';
long x = a;
cout << x << endl;
Всегда 97. Что такое 97? 97 чего? Ответ на этот вопрос - это ответ и на ваш вопрос про -61.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
03.04.2020, 19:49
Цитата Сообщение от Argus19 Посмотреть сообщение
"-61" чего?
А что в строке было-то?
Вы получаете неявное преоразование первого сивола (char для basic_string<CharT, Traits, ...) в целое. Остальное вопрос символа (который первый) и кодировки, имхо. Вы же не с пустой строкой играете, Argus19?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.04.2020, 19:49

Подскажите функцию, которая возвращает длину строки (string), strlen не подходит.
Подскажите функцию, которая возвращает длину строки (string), strlen не подходит!!!!!!

При попытке вычислить длину строки стандартной функцией strlen возникает ошибка
Есть код, в котором объявлена volatile-переменная c_buf, представляющая собой массив символов: unsigned int l; volatile char c_buf =...

Извлечение подстроки из строки (без использования библиотек функции)
Извлечение подстроки из строки (без использования библиотек функций). Помогите чем кто может, заранее спасибо:)

Удаление символов из строки без использования стандартной функции delete
Как удалить символы из строки без использования стандартной функции delete? конкретно моя задача: Дана строка. Удалить из неё все...

Найти максимальную длину строки в текстовом файле и распечатать все строки файла, имеющие такую длину
Найти максимальную длину строки в текстовом файле и распечатать все строки файла, имеющие такую длину.С++


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

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru