Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
Naatikin
4 / 4 / 0
Регистрация: 01.11.2010
Сообщений: 97
#1

strlen - C++

17.07.2012, 20:50. Просмотров 1480. Ответов 11
Метки нет (Все метки)

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

Добавлено через 23 минуты
со вторым вопросом разобрался - размер свободной RAM
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.07.2012, 20:50     strlen
Посмотрите здесь:

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

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

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

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

Проблема с strlen - C++
Доброго времени суток. При подсчете длин строки strlen считает до 1 пробела, в итоге в 2 строке только 1 слово из 1 строки. В чем может...

Не работает strlen - C++
сабж не могу взять длину строки функция определения возвращает не понятные значения #include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,183
Завершенные тесты: 1
17.07.2012, 21:04     strlen #2
Думаю, что быстрее всего будет через указатель:
C++
1
2
3
char *p,str[]="test";
for(p=str;*p;++p);
int len=p-str;
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
17.07.2012, 21:16     strlen #3
По какому критерию оценивается затратность? Если в качестве обучения, то примерная реализация:

C++
1
2
3
4
5
6
7
8
9
10
std::size_t myStrlen( const char *str ) {
   std::size_t length = 0;
 
   while ( *str ) {
      str++;
      length++;
   }
 
   return length;
}
А так - сомневаюсь, что Вы придумаете что то быстрее стандартной функции.
Naatikin
4 / 4 / 0
Регистрация: 01.11.2010
Сообщений: 97
17.07.2012, 21:28  [ТС]     strlen #4
хорошо, а если строка длиной в миллиард, получается будет миллиард итераций и миллиард проверок.
а что если брать, например, каждый 1000-ый (порядковое) элемент и смотреть его содержимое.
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
17.07.2012, 21:32     strlen #5
Цитата Сообщение от Naatikin Посмотреть сообщение
а что если брать, например, каждый 1000-ый (порядковое) элемент и смотреть его содержимое.
Не боитесь segfaut схлопоать?
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
17.07.2012, 21:39     strlen #6
Не ужели во время изучения Вы не встречались с вырожением "выход за пределы массива"?
Naatikin
4 / 4 / 0
Регистрация: 01.11.2010
Сообщений: 97
17.07.2012, 21:45  [ТС]     strlen #7
проблемы такого метода я понимаю, но ведь последовательная итерация в данной ситуации неэкономична

Добавлено через 3 минуты
Toshkarik, встречал конечно.
PSIAlt
86 / 86 / 8
Регистрация: 19.06.2012
Сообщений: 245
17.07.2012, 21:46     strlen #8
Если у тебя null-terminated string то выбора у тебя нет - сложность будет O(N)
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
17.07.2012, 21:50     strlen #9
Для этого в С++ есть класс-контейнер std::string, в котором размер строки хранится в переменной, и не нужно каждый раз ничего вычислять.
Naatikin
4 / 4 / 0
Регистрация: 01.11.2010
Сообщений: 97
17.07.2012, 21:51  [ТС]     strlen #10
окей. спасибо.
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
17.07.2012, 22:03     strlen #11
Для раздумий.
http://liveworkspace.org/code/793a5d...5fe40436811dbc
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.07.2012, 22:04     strlen
Еще ссылки по теме:

функция strlen - C++
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; #define maxline 1000 // for s #define eof -1...

своя strlen - C++
#include&lt;iostream.h&gt; int strlen(char *string) { int lengh=0; while(*string++) lengh++; return ++lengh; } ...

не ожидал такого от strlen - C++
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;fstream&gt; #include &lt;string.h&gt; using namespace std; const int MAX = 256; ...

Объясните разницу в strlen() - C++
Вот код: char ch = &quot;Hello, World!&quot;; char ch2 = {'H','e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!'}; // тоже самое...


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

Или воспользуйтесь поиском по форуму:
rangerx
1932 / 1541 / 141
Регистрация: 31.05.2009
Сообщений: 2,911
17.07.2012, 22:04     strlen #12
Naatikin, если у тебя имеется буфер фиксированной длины, то можно отвести под хранение размера строки последние несколько байт массива. Но, функции для работы с такими строками, cамо собой, придётся писать самостоятельно ))
Yandex
Объявления
17.07.2012, 22:04     strlen
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru