Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/48: Рейтинг темы: голосов - 48, средняя оценка - 4.67
2 / 2 / 0
Регистрация: 04.03.2015
Сообщений: 76
1

Функция, которая вычисляет длину C-style строки

07.10.2015, 18:42. Показов 9148. Ответов 10
Метки нет (Все метки)

Очень часто для работы со строками нам нужно сначала вычислить длину строки. Для C-style строк длина нигде явно не хранится, но её можно вычислить. Напишите функцию, которая вычисляет длину C-style строки. Учтите, что завершающий нулевой символ считать не нужно.

Требования к реализации: при выполнении этого задания вы можете создавать любые вспомогательные функции. Вводить или выводить что-либо не нужно. Реализовывать функцию main не нужно.
1

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.10.2015, 18:42
Ответы с готовыми решениями:

Напишите функцию, которая вычисляет длину строки
#include "stdafx.h" #include <iostream> using namespace std; unsigned strlen(const char...

Программа, которая вычисляет длину введенной с клавиатуры строки
Ребят помогите и объясните пожалуйста :wall::cry: Нужно написать программу, которая вычисляет...

Напишите программу, которая вычисляет длину введенной с клавиатуры строки
Напишите программу, которая вычисляет длину введенной с клавиатуры строки.

Написать программу, которая вычисляет длину введенной с клавиатуры строки
Написать программу, которая вычисляет длину введенной с клавиатуры строки(написать без стандартных...

10
541 / 349 / 206
Регистрация: 27.11.2014
Сообщений: 1,043
07.10.2015, 18:53 2
Лучший ответ Сообщение было отмечено lerka1996 как решение

Решение

lerka1996, указывай чтоль адресок 2.1 или 3.2. по расписанию гонять то уж надоело

Добавлено через 5 минут
C++
1
2
3
4
5
6
7
unsigned strlen(const char *str)
{
    unsigned cnt = 0;
    while(*(str + cnt) != 0) ++cnt;
 
    return cnt;
}
балин пиши пункт, чтоб искать быстрее
0
3 / 3 / 2
Регистрация: 03.11.2016
Сообщений: 138
19.12.2016, 19:18 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
using namespace std;
 
unsigned strlen(const char *str)
{
    unsigned len = 0;
    while(*str++) len++;
 
    return len;
}
int main() {
    
const char str = "Money love";
 
strlen(str);
 
 
    return 0;
}
В чем ошибка? не компилируется код.
0
Комп_Оратор)
Эксперт по математике/физике
8719 / 4428 / 598
Регистрация: 04.12.2011
Сообщений: 13,270
Записей в блоге: 16
19.12.2016, 19:43 4
Как вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
size_t cstring_len(const char *s){
const char *c(s);
while(*c++);
return c-s-1;
}
size_t cstring_size(const char *s, size_t c){
if(!*s)return c;
cstring_size(++s, ++c);
}
size_t cstring_size(const char *s){
return cstring_size(s, 0);
}
int main(int argc, char* argv[])
{
const char *s="hihicks"; 
cout<<s<<'\t'<<cstring_len(s)<<endl;
cout<<s<<'\t'<<cstring_size(s)<<endl;
system("pause");
return 0;
}
0
3 / 3 / 2
Регистрация: 03.11.2016
Сообщений: 138
19.12.2016, 22:49 5
я не чего не понял что написано
Цитата Сообщение от IGPIGP Посмотреть сообщение
while(*c++);
return c-s-1;
думаю этому есть разумное объяснение.
0
Комп_Оратор)
Эксперт по математике/физике
8719 / 4428 / 598
Регистрация: 04.12.2011
Сообщений: 13,270
Записей в блоге: 16
19.12.2016, 22:54 6
Цитата Сообщение от MilkyWay888 Посмотреть сообщение
я не чего не понял что написано
Почему? Рекурсивные версии немного сложнее понять. А тут - бежим по адресам до терминатора. Разница двух указателей - расстояние в длинах типа, то есть длина (количество чаров в данном разе). А поскольку терминатор нам ненужен на единицу уменьшаем эту разность и возвращаем.
0
1480 / 944 / 811
Регистрация: 30.04.2016
Сообщений: 3,298
20.12.2016, 19:30 7
lerka1996, после прочтения некоторых книг, удалось сотворить вот такое чудо. Держите вашу функцию.

C++
1
2
3
4
5
6
7
int StringLength(string s)
{
int l;
for (int i = 0; s[i]; i++)
l = i;
return ++l;
}
0
1021 / 705 / 314
Регистрация: 26.02.2015
Сообщений: 3,201
20.12.2016, 19:39 8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
using namespace std;
 
unsigned strlen(const char *str)
{
    unsigned len = 0;
    while (*str++) len++;
 
    return len;
}
int main() {
 
    char * str = "Money love";
 
    strlen(str);
 
 
    return 0;
}
Добавлено через 1 минуту
Fixer_84, в классе string разве используется символ конца строки? Да и вообще, зачем в нем вычислять длину, если можно воспользоваться методом size()?
0
Любитель чаепитий
3586 / 1686 / 519
Регистрация: 24.08.2014
Сообщений: 5,704
Записей в блоге: 1
20.12.2016, 19:44 9
C++
1
2
3
4
unsigned length( char const* str )
{
    return *str ? 1 + length(++str) : 0;
}
2
1021 / 705 / 314
Регистрация: 26.02.2015
Сообщений: 3,201
20.12.2016, 19:55 10
GbaLog-, вы большой любитель рекурсий?
0
GbaLog-
20.12.2016, 20:31     Функция, которая вычисляет длину C-style строки
  #11

Не по теме:

Цитата Сообщение от Nishen Посмотреть сообщение
вы большой любитель рекурсий?
Нет, я любитель делать однострочные функции. :D

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.12.2016, 20:31

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Рекурсивная функция, которая вычисляет длину строки.
Напишите рекурсивную функцию, которая вычисляет длину строки (код Delphi)

Напишите рекурсивную функцию, которая вычисляет длину строки
пожалуйста помогите написать программку к двум задаче в паскале Напишите рекурсивную функцию,...

Рекурсия. Написать рекурсивную функцию которая вычисляет длину строки
Всем доброго времени суток! Задача. Написать рекурсивную функцию которая вычисляет длину строки....

Переписать код с паскаля на c# (Рекурсия. Написать рекурсивную функцию которая вычисляет длину строки)
Begin If S = '' Then Len := 0 Else Begin Delete(s, 1, 1); Len := 1 +...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

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