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

Вернуть строку изфункции

14.05.2020, 13:25. Показов 269. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пишу функцию,которая в зависимости от от числа, которое ей передали, вернёт корректное название недели.
Например, одна неделя, две недели, 60 недель... Алгоритм работает. Проблемы начались тогда, когда я решил упаковать его в функцию.

функия
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
char* weeker(int week) {
    
    string names[6] = { "неделя", "недели","недель", "день", "дня", "дней" };
    char weekName[20];
 
    if (week == 1) {       
        strcpy_s(weekName, names[0].c_str());
        return weekName;
    }
    if (week >= 2 && week <= 4) {       
        strcpy_s(weekName, names[1].c_str());
        return weekName;
    }
    if (week > 4) {
        strcpy_s(weekName, names[2].c_str());
        return weekName;
    }
}


Вызываю ее так:
C++
1
2
3
4
int week;
cin >> week;
 
cout << week << " " << weeker(week) + '\n';
На выходе полую это:

Кликните здесь для просмотра всего текста


Получается, что функция корректоно возваращает результат, а проблема зарыта где-то в выводе. Что я делаю не так?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.05.2020, 13:25
Ответы с готовыми решениями:

Вернуть строку в си ++
Здравствуйте, интересует следующий вопрос: есть функция,которая переводит в строку 2 числа и...

Вернуть строку
Привет всем! Подскажите пожалуйста знающие люди, как вернуть из строки точное значение. Есть...

Вернуть строку из fetch()
Плохо знаком с асинхронным программированием, пытаюсь вернуть разные строки async updateImage(id)...

Как вернуть строку?
Как в ХР вернуть строку? Не знаю как называется, командная или как. Сделал скрин где она должна...

6
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
14.05.2020, 13:37 2
Ханапов, так нельзя делать. У массива weekName время жизни в области видимости функции.
Ну и достаточно просто вернуть names[week].
C++
1
2
static char *names[] = { "неделя", "недели","недель", "день", "дня", "дней" };
return names[week];
0
3 / 3 / 2
Регистрация: 26.01.2013
Сообщений: 69
14.05.2020, 13:59  [ТС] 3
Вы немного не поняли.

Мне нужно чтобы функция возращала склонение существительного неделя. . Передали ей число 1, она выдаёт "неделя" . Передали 8, она возвращает "недель".
0
249 / 219 / 63
Регистрация: 30.07.2013
Сообщений: 465
14.05.2020, 14:03 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const std::string& weeker(int week)
{
    static const std::string weeks[] = { "неделя", "недели", "недель"};
 
    switch (week)
    {
        case 1:
            return weeks[0];
 
        case 2:
        case 3:
        case 4:
            return weeks[1];
 
        default:
            return weeks[2];
    }
}
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
14.05.2020, 14:18 5
Fyret, что вернёт например для числа 101
0
261 / 111 / 53
Регистрация: 22.01.2017
Сообщений: 448
14.05.2020, 14:21 6
Ханапов, это понятно, условия проверки вы вставьте. А возвращайте как я показал.
0
249 / 219 / 63
Регистрация: 30.07.2013
Сообщений: 465
14.05.2020, 14:33 7
Вернет "недель", очевидно. Правильное замечание, но мой комментарий не об окончательном решении.
0
14.05.2020, 14:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.05.2020, 14:33
Помогаю со студенческими работами здесь

Вернуть строку в параметрах
Добрый день, коллеги! В С++ не силен, поэтому обращаюсь к экспертам. Пишу внешнюю библиотеку для...

Вернуть строку из функции.
Как вернуть строку(AnsiString) из функции? int MyTXT (AnsiString Temlate, AnsiString tmp) { ...

Вернуть указатель на строку
Найти в массиве вторую строку, содержащую хотя бы один ноль. Вернуть указатель на эту строку,...

Вернуть курсор на предыдущую строку
Помогите, как вернуть курсор на предыдущую строку? В программе считывается последовательность...

Как вернуть строку из функции
Здрасьте! Мне необходимо вернуть строку из функции, но Я чего то не понимаю.Вот простенькая...

Вернуть указатель на строку из функции
Есть на с++ у меня функция: char *PrToStr(DWORD priority) { char *s; switch (priority) {...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru