С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
6 / 6 / 5
Регистрация: 22.11.2012
Сообщений: 95
1

своя strlen

31.03.2013, 19:49. Показов 3789. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream.h>
int strlen(char *string)
{
    int lengh=0;
    while(*string++)
    lengh++;
    return ++lengh;
}
int main(void)
{
    cout<<strlen("lili");
    char s[]="lili";
    cout<<strlen(s);
    system("pause");
    return 1;
}
почему то в 1м случае выводит мне 4 (должно быть 5 т.к 4+ нуль символ)
во втором случае все как надо выводит 5
в чем ошибка????
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.03.2013, 19:49
Ответы с готовыми решениями:

strlen
Есть ли подобие strlen, но для других типов данных? int*, short* и тп?

strlen
добрый вечер. пытаюсь придумать менее затратный strlen) вопрос появился: максимальный размер...

strlen
Или я дурак,или лыжи не едут??? Люди добрые, скажите чего не так. Не могу определить длину строки....

strlen()+1
Зачем использовать strlen в данном случае? char s; get.cin(s,strlen(s)+1);

11
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
31.03.2013, 19:58 2
Лучший ответ Сообщение было отмечено как решение

Решение

Точно сказать не могу. Но в первом случае аргумент имеет тип const char *, он автоматически не приводится к типу char *. Поэтому для него вызывается более подходящая функция strlen - т.е. стандартная.
Короче, впредь не называй свои фукнции также как и стандартные из C/C++.
2
6 / 6 / 5
Регистрация: 22.11.2012
Сообщений: 95
31.03.2013, 20:02  [ТС] 3
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Точно сказать не могу. Но в первом случае аргумент имеет тип const char *, он автоматически не приводится к типу char *. Поэтому для него вызывается более подходящая функция strlen - т.е. стандартная.
Короче, впредь не называй свои фукнции также как и стандартные из C/C++.
но я же не подключила string.h а значит у него нет сейчас такой функции
но интереса ради переименовала и таки все заработало как надо, тогда не можете ли вы обьяснить почему оно вызвало стандарную strlen из string.h который я даже не подключила????
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
31.03.2013, 20:12 4
Цитата Сообщение от лилиэн Посмотреть сообщение
но я же не подключила string.h
Я практически уверен, что он берет функцию из iostream.h.

Добавлено через 4 минуты
iostream.h - это кажись какая-то древность... Если пишешь на C++, то используй <iostream>
0
Неэпический
18112 / 10699 / 2062
Регистрация: 27.09.2012
Сообщений: 26,946
Записей в блоге: 1
31.03.2013, 20:13 5
C++
1
2
3
4
5
6
size_t mystrlen(const char * str){
    const char * p(str);
    while(*p)
        ++p;
    return p-str;
}
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
31.03.2013, 20:13 6
int strlen(char *string) - это перегрузка другой глобальной функции, у которой сигнатура
int strlen(const char *string);

в одном случае вызывается одна, в другом - другая. чтобы не было конфликтов, поменяйте имя у своей функции.
хотя бы с большой буквы сделайте:
int StrLen(const char* string)
0
Заблокирован
31.03.2013, 20:38 7
во втором случае все как надо выводит 5
Кому это все - надо, чтобы слово из 4 букв давало длину 5? Посмотрите как работает стандартная функция.
0
6 / 6 / 5
Регистрация: 22.11.2012
Сообщений: 95
31.03.2013, 21:37  [ТС] 8
Цитата Сообщение от Croessmah Посмотреть сообщение
C++
1
2
3
4
5
6
size_t mystrlen(const char * str){
    const char * p(str);
    while(*p)
        ++p;
    return p-str;
}
а объяснить можно????

Добавлено через 1 минуту
Цитата Сообщение от IrineK Посмотреть сообщение
Кому это все - надо, чтобы слово из 4 букв давало длину 5?
мне не длину слова надо а длину строки , а она увы все же длиннее на 1 символ
0
Неэпический
18112 / 10699 / 2062
Регистрация: 27.09.2012
Сообщений: 26,946
Записей в блоге: 1
31.03.2013, 21:44 9
Цитата Сообщение от лилиэн Посмотреть сообщение
а она увы все же длиннее на 1 символ
то есть строка без букв будет длиной в 1 символ? )))
А пустой строки вообще не бывает?

Добавлено через 1 минуту
Цитата Сообщение от лилиэн Посмотреть сообщение
а объяснить можно????
а че тут объяснять?
Увеличиваем указатель, пока не уткнемся в 0. Потом отнимаем от конечного адреса адрес начальный.
0
6 / 6 / 5
Регистрация: 22.11.2012
Сообщений: 95
31.03.2013, 21:48  [ТС] 10
Цитата Сообщение от Croessmah Посмотреть сообщение
то есть строка без букв будет длиной в 1 символ? )))
то есть если я напишу
C++
1
char a[]="";
а потом проверю длину а то ее длина будет =1, а не 0, и да, пустой строки нету, есть строка которая содержит только NULL .Вот в этом то я уверенна на все 101%
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
31.03.2013, 21:58 11
Цитата Сообщение от лилиэн Посмотреть сообщение
пустой строки нету
Тебе нужно нучиться различать понятие длины строки и размер массива, в которой она хранится.
Строка "абв" имеет длину 3, что логично и понятно. Но если посмотреть на память, то эта строка будет занимать 3+1 байта(т.е. понадобится 4 элемента типа char), что тоже понятно. Четвертый байт - это символ конца строки, который не является символом самой строки, он просто обозначает место, где строка кончается.

Добавлено через 1 минуту
Т.е. строка у нас из трех символов, но для ее хранения понадобится массив из 4х элементов, чтобы вместить символ конца строки.
0
6 / 6 / 5
Регистрация: 22.11.2012
Сообщений: 95
01.04.2013, 15:10  [ТС] 12
Цитата Сообщение от nonedark2008 Посмотреть сообщение
Тебе нужно нучиться различать понятие длины строки и размер массива, в которой она хранится.
Строка "абв" имеет длину 3, что логично и понятно. Но если посмотреть на память, то эта строка будет занимать 3+1 байта(т.е. понадобится 4 элемента типа char), что тоже понятно. Четвертый байт - это символ конца строки, который не является символом самой строки, он просто обозначает место, где строка кончается.

Добавлено через 1 минуту
Т.е. строка у нас из трех символов, но для ее хранения понадобится массив из 4х элементов, чтобы вместить символ конца строки.
ну это я и имела в виду))))
0
01.04.2013, 15:10
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.04.2013, 15:10
Помогаю со студенческими работами здесь

Не работает strlen
сабж не могу взять длину строки функция определения возвращает не понятные значения #include...

функция strlen
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; #define maxline...

Проблема с strlen
Доброго времени суток. При подсчете длин строки strlen считает до 1 пробела, в итоге в 2 строке...

C++ <cstring> strlen()
Народ, может ли функция strlen() обрабатывать тип не const char, а char ? компилятор ошибку выдаёт...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
Как написать микросервис на Go/Golang с Kafka и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C# с RabbitMQ, CQRS и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution https:/ / www. cyberforum. ru/ blogs/ 223907/ blog8781. html прилагаю файл архива проекта в Gowin Eda. Восьмибитный счётчик из сумматора+ генератор сигнала. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru