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

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

02.04.2020, 13:50. Показов 20090. Ответов 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
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
03.04.2020, 02:03
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Argus19 Посмотреть сообщение
Для этого надо нормально знать английский язык.
И знать о том, что за зверь - константная версия. Это, - потом)
0
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
03.04.2020, 02:04
Цитата Сообщение от Argus19 Посмотреть сообщение
Для этого надо нормально знать английский язык.
Есть прекрасные книги на русском.
Например вот.
0
 Аватар для Argus19
1450 / 467 / 78
Регистрация: 24.09.2017
Сообщений: 2,557
Записей в блоге: 24
03.04.2020, 02:14
Цитата Сообщение от IGPIGP Посмотреть сообщение
count и counter по коду идентичны
Способ передачи строки разный
Цитата Сообщение от IGPIGP Посмотреть сообщение
Нечётное количество, - дурная примета
И не такое бывает:
Миниатюры
Найти длину строки, без использования функции strlen()  
0
 Аватар для Argus19
1450 / 467 / 78
Регистрация: 24.09.2017
Сообщений: 2,557
Записей в блоге: 24
03.04.2020, 02:15
Цитата Сообщение от DrOffset Посмотреть сообщение
Есть прекрасные книги на русском
Спасибо. Скачал. Буду почитать.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
03.04.2020, 02:21
Цитата Сообщение от Argus19 Посмотреть сообщение
Способ передачи строки разный
Спать пора) Не въехал, что по значению, - слишком неестественно.
Цитата Сообщение от Argus19 Посмотреть сообщение
Если разрушить понт с while без тела
Я там насочинял что-то левое. Всё проще:
C++
1
2
3
4
5
6
size_t StringLen(const char  *s)
{
    const char  *p=s ;
        while(*p){ ++p; };
    return p-s;
}
0
 Аватар для Argus19
1450 / 467 / 78
Регистрация: 24.09.2017
Сообщений: 2,557
Записей в блоге: 24
03.04.2020, 02:29
Цитата Сообщение от IGPIGP Посмотреть сообщение
Не въехал, что по значению
С этим понятно, непонятно, как передаётся по адресу и указателю. Я же не передаю специально созданные переменные (указатель и адрес). Если передавать, например, из VB 6.0, то написал бы:
Visual Basic
1
....Declare Function .....(ByRef .... As.....)
т.е. по адресу, а тут просто
C++
1
функция(str);
Если по значению, ясно, а по адресу получается что компилятор за меня думает?
Цитата Сообщение от IGPIGP Посмотреть сообщение
Всё проще:
Завтра попробую. Сегодня и так голову ломал больше 8 часов.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
03.04.2020, 02:40
Цитата Сообщение от Argus19 Посмотреть сообщение
Завтра попробую.
Вдогонку: - у меня на хрюше (про) стоят code::block и Qt (вот с ним пришлось помучиться, чтобы подобрать версию) и оба юзают MinGW с 11-й версией)
На других системах современные операционки и всё проще.
Если у вас с этим загвоздка, то она решаема. Ставьте и не страдайте. На MVS10(Express edition probably?) они не повлияют.
0
 Аватар для Argus19
1450 / 467 / 78
Регистрация: 24.09.2017
Сообщений: 2,557
Записей в блоге: 24
03.04.2020, 03:31
Цитата Сообщение от IGPIGP Посмотреть сообщение
MVS10
Professional Rus.
Форум тормозит со страшной силой. Четвёртый час, а всё виснет 504 ошибкой. Неужели по ночам много посетителей?

Добавлено через 7 минут
IGPIGP, Попробовал ваш последний код из поста №45. Не спится. Работает и опять непонятно как.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
03.04.2020, 10:11
Цитата Сообщение от Argus19 Посмотреть сообщение
MVS10
Professional Rus.
Тогда вы можете поставить вполне современный MinGW - GCC версия С++ компилятора для Windows. Ставьте 32 разрядную + code::block, - моё мнение. Это проще всего. MVS Community Edition тоже можете поставить, - получите мелкомягкий вариант.
Цитата Сообщение от Argus19 Посмотреть сообщение
Работает и опять непонятно как.
Что непонятно, - конкретнее?
C++
1
2
3
4
5
6
7
8
9
size_t StringLen(const char  *s)
{
    const char  *p=s ;
        while(*p)//проверка перед началом каждой итерации
            {
                 ++p; //если увеличение найдёт \0 следующего раза не будет)
            };
        return p-s;//тут ровно длина в элементах типа (char то есть)
}
1
 Аватар для Argus19
1450 / 467 / 78
Регистрация: 24.09.2017
Сообщений: 2,557
Записей в блоге: 24
03.04.2020, 11:50
Спасибо
Цитата Сообщение от IGPIGP Посмотреть сообщение
//проверка перед началом каждой итерации
указателю р присвоен указатель на первый элемент переданной строки.
При достижении им конца строки его значение станет false?
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
03.04.2020, 11:57
Цитата Сообщение от Argus19 Посмотреть сообщение
При достижении им конца строки его значение станет false?
Ноль неявно преобразуем к false, не ноль к true. В этом смысле
C++
1
if(a)
и
C++
1
if(0==a)
и
C++
1
if(true==a)
эквивалентны)
0
 Аватар для Argus19
1450 / 467 / 78
Регистрация: 24.09.2017
Сообщений: 2,557
Записей в блоге: 24
03.04.2020, 11:59
Цитата Сообщение от IGPIGP Посмотреть сообщение
while(*p){ ++p; };
Тут не понятно. Первый раз вижу такую конструкцию.
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
03.04.2020, 12:08
Цитата Сообщение от Argus19 Посмотреть сообщение
Тут не понятно. Первый раз вижу такую конструкцию.
Это не конструкция. Это формат в одну строку. Оно допустимо и так:
C++
1
while(*p) ++p;
Потому что оператор тела цикла очень прост для чтения. Но я же вам показал код в формате enterprise))) И конструкция то одинакова же?
Argus19, хочу вот о чём сказать.
Цитата Сообщение от Argus19 Посмотреть сообщение
Не спится.
Старайтесь дозировать и чередовать нагрузку с физ. тренингом и отдыхом. Нельзя чтобы бессонница стала системой. В IT это часто бывает. И обычно не заканчивается чем-то хорошим.
0
 Аватар для Argus19
1450 / 467 / 78
Регистрация: 24.09.2017
Сообщений: 2,557
Записей в блоге: 24
03.04.2020, 12:34
Цитата Сообщение от IGPIGP Посмотреть сообщение
Это формат в одну строку
Фу. Ночью спать надо.
Цитата Сообщение от IGPIGP Посмотреть сообщение
Старайтесь дозировать и чередовать нагрузку с физ. тренингом и отдыхом.

Не по теме:

Я сейчас работаю дворником в школе. Физическая нагрузка запредельная, т.к. надо чтобы блестело и сияло. Задницу можно притулить только во время перекура. Дети же. Пусть будет чисто. Может поймут, что чистота это чужой труд. Причём, ломовой. Отмороженных детишек хватает. Школа, благодаря "реформаторскому зуду" депутатиков ГД, больше не занимается воспитаним.

Школа предоставляет образовательные услуги
. Кое-какая воспитательная работа тЕплится.
Мой старший внук поступил в институт на программиста и, пока идут общеобразовательные предметы, я потихоньку разбираюсь с С++. Надеюсь убить стаю зайцев : Помочь внуку, если будет надобность. Самому интересно, т.к. опыт написания простых программ на VB 6.0, уже устаревший, а VB.Net не хочу. Видимо, несколькочасовое ожидание установки Net.Framework на Windows Xp, развило идиосинкразию к платформе Net :D. И, чтобы "мозги не протухли". Маразм не лечится и он мне не нужен.

0
03.04.2020, 12:51

Не по теме:

Argus19, а я купился на аватар с числом 19... Но не суть. Любой новичок - новичок. Я начал где-то за 50, если не считать зомбо-кода (достаточно сложного, кстати) на автолиспе и ряде случаев в GW-Basic)
Что-ж... Удачи)

0
 Аватар для Argus19
1450 / 467 / 78
Регистрация: 24.09.2017
Сообщений: 2,557
Записей в блоге: 24
03.04.2020, 14:05
Цитата Сообщение от IGPIGP Посмотреть сообщение
Что-ж... Удачи
Спасибо.
Никак не соображу
C++
1
2
    long x = *S.begin();
    long y = *S.end();
Первая строка выполняется, а вторая нет. Ошибка: "строковый итератор не разыменовываемый".
Понимаю, что способ вычисления количества символов таким образом практически извращение, но интересно же!
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
03.04.2020, 14:17
Цитата Сообщение от IGPIGP Посмотреть сообщение
эквивалентны)
а теперь правильный ответ:
ноль - false, все остальное - true

Цитата Сообщение от IGPIGP Посмотреть сообщение
if(0==a)
Цитата Сообщение от IGPIGP Посмотреть сообщение
if(true==a)
никак не могут быть эквивалентны.


if(0==a) эквивалентно if(false==a) или if(!a)
0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
03.04.2020, 16:48
Цитата Сообщение от hoggy Посмотреть сообщение
а теперь правильный ответ:
hoggy, вы любите появляться с правильными ответами в конце темы. В свойственной вам манере.
Цитата Сообщение от IGPIGP Посмотреть сообщение
Ноль неявно преобразуем к false, не ноль к true.
Цитата Сообщение от hoggy Посмотреть сообщение
ноль - false, все остальное - true
То есть, всё остальное - кроме нуля может-таки быть и нулём?
Цитата Сообщение от hoggy Посмотреть сообщение
никак не могут быть эквивалентны.
Тут я погрешность допустил
0!=а
лучше бы было. Тогда они были бы тождественны. А так они эквивалентны в контексте применения. При желании поставить контекст в неудобное положение - будет неэквивалентно. Неважно это.
Цитата Сообщение от Argus19 Посмотреть сообщение
Первая строка выполняется, а вторая нет.
Штука в том, что реализация не гарантирует возможность разименования для end(), в то время как разыменование указателя указывающего на терминальный ноль это нормальное явление.
Argus19, штука в том, что математики умеют анализировать, но плохо обобщают. Из-за этого порождаются совершенно разно-впихуемые абстракции.
Это один из наглядных примеров.
Для си-строк просто нет другого выхода как впихнуть конец в структуру, а значащей частью считать всё что перед ней. Это логично. То есть длина данных для "mama" - 4 в то время как наличие скрытого '\0' требует фактического размера для размещения, не менее 5.
А итераторы - классы со скрытой механикой. Для человека, для которого лишний байт - боль, реализация с фактически доступным терминирующим элементом - пытка мозга. Вот они и отыгрались на end() за наличие терминатора. По полной. Ноль терминатор ведь сэкономить нельзя. Иначе с-строка обрастёт тормознутой оболочкой. А вот с элементом указываемым итератором end() - легко.
Типичная логика следующая: если в контейнере очень большие классы (не указатели на классы) то экономия одной штуки - благо. А если у нас куча контейнеров с одним элементом, то имея фактический элемент для "ничто" - мы падаем в бездну.
Ни кто не думает о том, что контейнеры созданы для того, чтобы не хранить объекты россыпью по одиночке и наличие кучи пустых или мало заполненных контейнеров одного вида, - проблема плохого дизайна. Взяли и сэкономили.
Но учитывая, что есть и реверс итераторы нужно бы иметь пустой элемент и спереди.
Тут трудно проводить полные аналогии указателей с итераторами)
1
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
03.04.2020, 16:59
Цитата Сообщение от Argus19 Посмотреть сообщение
Первая строка выполняется, а вторая нет. Ошибка: "строковый итератор не разыменовываемый".
Итератор end - это абстракция над понятием "нечто за пределами последовательности элементов". И если нечто за пределами последовательности в случае С-строки - это ноль-символ, и его можно физически пощупать, то в случае с другими контейнерами этого сделать нельзя.
Как раз потому, что итератор - это хорошо обобщенная концепция, то она не может себе позволить делать исключения для строк. Концепция едина для всех, поэтому итератор, указывающий за пределы последовательности, в соответствии со своей семантикой разыменовываться не может.
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
03.04.2020, 17:41
Цитата Сообщение от IGPIGP Посмотреть сообщение
Но учитывая, что есть и реверс итераторы нужно бы иметь пустой элемент и спереди.
Тут трудно проводить полные аналогии указателей с итераторами)
Вот кстати типичный пример обобщающей недостаточности еще у авторов С. На ноль терминатор они не поскупились, а на ноль превратник не хватило воображения. Теперь нельзя написать
C++
1
if(*сstr--)
где сstr указывает внутрь строки. Нужно сказать, что в те времена слово мэгабайт было как юникорн. Но строки то не были односимвольными в среднем и экономия имхо не аргумент. Даже если его таковым и приняли.

Так все и привыкли. И ещё мне наваляют за "вольнодумство". Вы же видите аргументацию: - у с-строк терминатор поторогать можно, а у контейнеров нельзя поэтому - и птп.
Не контейнеры такие, потому что задуманы как непотрагиваемые за ноль, а нуля у них в фихическом смысле нет потому, что они контейнеры а не с-строки...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.04.2020, 17:41

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 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: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru