Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/29: Рейтинг темы: голосов - 29, средняя оценка - 4.66
1 / 1 / 2
Регистрация: 24.09.2016
Сообщений: 144

Создать рекурсивную функцию подсчета длины строки

14.10.2016, 17:55. Показов 5576. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть ТЗ по нахождению длины строки при помощи рекурсивной функции. вот написал код. но у меня в любом случае выдает значение 1. что подскажете?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <cstring>
 
using namespace std;
 
int length(char* str){
    int dlina = 0, i;
    for (i = 0; str[i] == '/0'; i++)
    dlina++;
    return dlina;
}
 
int main () {
    char str[256];
    setlocale (0, "");
    cout << "введите строку: ";
    cin.getline(str, 256);
    cout << endl << "длина строки " << length <<" символов.";
    }
я думаю, что надо разбить строку на массив символов и сравнивать посимвольно
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.10.2016, 17:55
Ответы с готовыми решениями:

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

Написать рекурсивную функцию для вычисления длины строки
Написать рекурсивную функцию для вычисления длины строки.

Создать рекурсивную функцию summ(s, i, j), проверяющую, является ли симметричной часть строки s
Помогите пожалуйста написать программку я рекурсией. Необходимо создать рекурсивную функцию summ(s,i, j), проверяющую, является ли...

19
59 / 59 / 53
Регистрация: 05.05.2013
Сообщений: 150
14.10.2016, 18:01
for (i = 0; str[i] != '\0'; i++)
0
1 / 1 / 2
Регистрация: 24.09.2016
Сообщений: 144
14.10.2016, 18:03  [ТС]
все равно выдает 1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <cstring>
 
using namespace std;
 
int length(char* str){
    int dlina = 0, i;
    for (i = 0; str[i] == '\0'; i++)
    dlina++;
    return dlina;
}
 
int main () {
    char str[256];
    setlocale (0, "");
    cout << "Ââåäèòå ïðåäëîæåíèå: ";
    cin.getline(str, 256);
    cout << endl << "Äëèíà âàøåé ñòðîêè " << length <<" ñèìâîëîâ.";
    }
0
59 / 59 / 53
Регистрация: 05.05.2013
Сообщений: 150
14.10.2016, 18:06
cout << endl << "длина строки " << length(str) <<" символов.";
1
1 / 1 / 2
Регистрация: 24.09.2016
Сообщений: 144
14.10.2016, 18:08  [ТС]
уже лучше. теперь выдает 0. и если оставить строку пустой, то выдает 4 символа.
0
59 / 59 / 53
Регистрация: 05.05.2013
Сообщений: 150
14.10.2016, 18:12
Лучший ответ Сообщение было отмечено pavlenko2k16 как решение

Решение

Цитата Сообщение от VAN0 Посмотреть сообщение
for (i = 0; str[i] != '\0'; i++)
Цитата Сообщение от VAN0 Посмотреть сообщение
cout << endl << "длина строки " << length(str) <<" символов.";
все поменял?
1
1 / 1 / 2
Регистрация: 24.09.2016
Сообщений: 144
14.10.2016, 18:14  [ТС]
не заметил знак "!". спасибо. работает
0
 Аватар для Badjuicy
14 / 14 / 11
Регистрация: 12.10.2016
Сообщений: 52
14.10.2016, 18:20
Написал же сам : при помощи рекурсивной функции... В каком месте то она рекурсивная?
Лови подарок

https://ru.wikipedia.org/wiki/... 0%B8%D1%8F

Тебе может это нужно? //Pishi na angel'skom

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
 
int dlina = 0;
 
int length(char* str) {
    if (str[dlina] != '\0') {dlina++; length(str); }
        return dlina;
}
 
int main() {
    char str[256];
    cout << "Stroka : ";
    cin.getline(str, 256);
    cout << endl << "Dlina stroki " << length(str) << " simvolov." << endl;
    system("pause");
}
Если без глобальной переменной нужно (как четкому пацану), то
C++
1
2
3
4
5
int length(char* str) {
    static int dlina = 0;
    if (str[dlina] != '\0') {dlina++; length(str); }
        return dlina;
}
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
14.10.2016, 18:38
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/////////////////////////////////////////////////////////////////////
// 
/////////////////////////////////////////////////////////////////////
#include <iostream>
/////////////////////////////////////////////////////////////////////
size_t length( const char* str, size_t idx = 0 )
{
    return str[idx] == '\0' ? idx : length( str, ++idx );
}
/////////////////////////////////////////////////////////////////////
int main()
{
    std::cout << length( "length" ) << std::endl;
}
Добавлено через 1 минуту
Цитата Сообщение от Badjuicy Посмотреть сообщение
Если без глобальной переменной нужно (как четкому пацану), то
А если вызову 2 раза, то что будет?
0
 Аватар для Badjuicy
14 / 14 / 11
Регистрация: 12.10.2016
Сообщений: 52
14.10.2016, 19:11
Статическая переменная инициализируется один раз. Т.е. вызвав второй раз static int dlina = 0, мы инициалировать хотим вновь, но static не дает это сделать.

В итоге она просто продолжает расти ++. ^^
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
14.10.2016, 19:16
Badjuicy, Чет не работает, вот код:
http://rextester.com/KIP72239
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//g++  4.9.3
 
#include <iostream>
 
int length(char* str) {
    static int dlina = 0;
    if (str[dlina] != '\0') {dlina++; length(str); }
        return dlina;
}
 
int main()
{
    char* c1 = "length1";
    char* c2 = "asd";
    std::cout << length( c1 ) << std::endl;
    std::cout << length( c2 ) << std::endl;
}
0
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
14.10.2016, 19:20
Badjuicy, ваш код заработает правильно только 1 раз, потому что для первого запуска функции посчитатет правильно а при повторном просчете статическая переменная не обнулится, так что GbaLog-, прав
0
 Аватар для Badjuicy
14 / 14 / 11
Регистрация: 12.10.2016
Сообщений: 52
14.10.2016, 19:23
Что там не пашет? Приведи пример, при котором не корректно работает

Добавлено через 2 минуты
Воо, такое и надо писать. Ну тогда при след вызове функции надо обнулить... Мой косяк парни, признаю. Спасиб
0
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
14.10.2016, 19:24
Badjuicy, и как обнулите ?
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
14.10.2016, 19:24
Цитата Сообщение от Badjuicy Посмотреть сообщение
Приведи пример, при котором не корректно работает
По ссылке лень перейти?
Ладно, в примере выше вывод вот такой:
Code
1
2
7
9
А должен быть, очевидно:
Code
1
2
7
3
0
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
14.10.2016, 19:25
Badjuicy, точнее сказать как вы распознаете рекурентный вызов(когда из функции сами себя) от того, что в мейне
0
 Аватар для Badjuicy
14 / 14 / 11
Регистрация: 12.10.2016
Сообщений: 52
14.10.2016, 19:38
Лень ( Но уже посмотрел
Как исправлю? Перезагрузкой компьютера конечно же

Добавлено через 11 минут
А у вас есть предложения как эту переменную обнулить не меняя кода толком? А то не придумывается ничего, кроме как изменить код.
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
14.10.2016, 19:40
Цитата Сообщение от Badjuicy Посмотреть сообщение
А у вас есть предложения как эту переменную обнулить не меняя кода толком?
Для Вас поменять код - проблема?
0
Падаван С++
 Аватар для obivan
447 / 261 / 89
Регистрация: 11.11.2014
Сообщений: 916
14.10.2016, 19:43
Цитата Сообщение от Badjuicy Посмотреть сообщение
как эту переменную обнулить не меняя кода толком
посмотрите как делал GbaLog-, в этом плане сам код у вас плохо продуман, у него нет, как обнулить ну если хотите велосипед, то что то типо такого
C++
1
2
3
4
5
6
int length(char* str, bool reset = false) {
    static int dlina = 0;
    if(reset) dlina = 0;
    if (str[dlina] != '\0') {dlina++; length(str); }
        return dlina;
}
при обнулении из мейна вызваем так
C++
1
length("Hello", true);
но так делать не надо, еще раз повторюсь в этом плане у GbaLog-, хорошее решение
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
14.10.2016, 20:07
Цитата Сообщение от obivan Посмотреть сообщение
велосипед
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//g++  4.9.3
 
#include <iostream>
 
int length(char* str) {
    static bool dl = false;
    static int dlina = 0;
    if( dl ) dlina = dl = 0;
    if (str[dlina] != '\0') {dlina++; length(str); }
    if( !dl ) dl = true;
    return dlina;
}
 
int main()
{
    std::cout << length( "length1" ) << std::endl;
    std::cout << length( "asd" ) << std::endl;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.10.2016, 20:07
Помогаю со студенческими работами здесь

Написать рекурсивную функцию для подсчёта суммы
Написать рекурсивную функцию для подсчёта суммы S=1+(3/(1+3))+(5/(1+3+5))+(7/(1+3+5+7))+....

Описать рекурсивную функцию для подсчёта количества запятых
Описать рекурсивную функцию для подсчёта количества запятых в данном текстовом файле.

Как написать рекурсивную функцию подсчета вхождения любого элемента?
Здравствуйте. Читаю книгу - Грэм. Ansi Common lisp Задача - &quot;Предложите итеративное и рекурсивное определение функции, которая:? ...

Необходимо описать рекурсивную функцию для подсчёта количества запятых в текстовом файле
Необходимо описать рекурсивную функцию для подсчёта количества запятых в текстовом файле. Код есть,но он неправильный, так как выдает...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru