Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
23 / 27 / 18
Регистрация: 31.03.2018
Сообщений: 424
1

Возврат массива из функции

31.03.2018, 16:13. Просмотров 1297. Ответов 24

Здравствуйте! Нужно решить задачу, но для её решения я не могу понять как правильно вывести массив(mas) из ф-ции, чтобы показать в main все значения, которые массив получил по ходу выполнения ф-ции.
Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include <iostream>
#include <string.h>
using namespace std;
 
int funct(char *mass, int size);
 
int main()
{
    char string[10000] = "";
    cout << "Enter random text, please: " << endl;
    cin.getline(string, 10000);
    funct(string, 10000);
    cout << "Amount of words = " << mas[0] << endl;
    cout << "Amount of voice letters = " << mas[1] << endl;
    for (int i = 2, d = 1; i <= mas[0]; i++, d++)
    {
        cout << "Amount of letters in " << d << " word = " << mas[i] << endl;
    }
    return 0;
}
 
int funct(char *mass, int size)
{
    int mas[10000];
    char *p;
    int numerator = 0;
    int massize = strlen(mass);
    for (int i = 0; i < massize; i++)
    {
        if (mass[i] == ' ') numerator++;
    }
    numerator++;
    mas[0] = numerator;
    // кол-во слов
    int numerator_1 = 0;
    for (int i = 0; i < massize; i++)
    {
        if (mass[i] == 'e'
            && mass[i] == 'y'
            && mass[i] == 'u'
            && mass[i] == 'i'
            && mass[i] == 'o'
            && mass[i] == 'a'
            && mass[i] == 'E'
            && mass[i] == 'Y'
            && mass[i] == 'U'
            && mass[i] == 'I'
            && mass[i] == 'O'
            && mass[i] == 'A')
            numerator_1++;
    }
    mas[1] = numerator_1;
    // кол-во гласных букв
    int k = 2;
    for (int i = 0; i <= numerator; i++)
    {
        p = strtok(mass, " ");
        bool local_tf = true;
        do
        {
            mas[k] = strlen(p);
            k++;
            local_tf = false;
        } while (!local_tf);
    }
    // кол-во букв в слове
    return *mas;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.03.2018, 16:13
Ответы с готовыми решениями:

Возврат массива из функции
Здравствуйте, Не пойму почему не работает данный код. Пишет cannot convert 'std::string*' to...

Возврат массива из функции
Есть задача: используя функции, вычислить количество элементов заранее введённых массивов, которые...

Возврат массива из функции
Здравствуйте. Не могу разобраться, почему при передачи массива из функции но не правильно...

Возврат массива из функции
Программа должна переводить числа с 10 системы в двоичную... но почемуто выводит некорректно... Вот...

24
6913 / 5978 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
31.03.2018, 16:26 2
24-ю строку в main() перенеси.
0
117 / 96 / 79
Регистрация: 30.11.2017
Сообщений: 230
31.03.2018, 16:33 3
Возвращайте указатель на массив. Указатель ссылается на первый элемент.
0
6913 / 5978 / 2709
Регистрация: 14.04.2014
Сообщений: 25,504
31.03.2018, 16:48 4
Starfer, нельзя возвращать локальный объект.
0
nd2
3404 / 2785 / 1251
Регистрация: 29.01.2016
Сообщений: 9,423
31.03.2018, 18:52 5
Лучший ответ Сообщение было отмечено Iangyl как решение

Решение

C++
1
2
3
static int mas[10000];
//...
return mas;
C++
1
2
3
int* funct(char *mass, int size);
//...
int* mas = funct(string, 10000);
1
23 / 27 / 18
Регистрация: 31.03.2018
Сообщений: 424
31.03.2018, 23:33  [ТС] 6
Спасибо! Проблема с возвратом массива из ф-ции решена, но вылезла другая - краш программы после ввода слов через комаду cin.getline, вы не подскажете с чем это может быть связано?
0
nd2
3404 / 2785 / 1251
Регистрация: 29.01.2016
Сообщений: 9,423
31.03.2018, 23:37 7
Цитата Сообщение от Iangyl Посмотреть сообщение
Проблема с возвратом массива из ф-ции решена
Ясновидящих тут нет.
0
5 / 5 / 6
Регистрация: 23.03.2018
Сообщений: 98
01.04.2018, 01:40 8
Iangyl,
C++
1
getline(cin, /*переменная*/, /*'знак до которого читать строку'*/);
reference
0
nd2
3404 / 2785 / 1251
Регистрация: 29.01.2016
Сообщений: 9,423
01.04.2018, 01:42 9
Цитата Сообщение от perevertysh Посмотреть сообщение
getline(cin,
У ТС массив char, по имени string.
0
5 / 5 / 6
Регистрация: 23.03.2018
Сообщений: 98
01.04.2018, 01:47 10
nd2, ну строка же
0
nd2
3404 / 2785 / 1251
Регистрация: 29.01.2016
Сообщений: 9,423
01.04.2018, 01:50 11
Цитата Сообщение от perevertysh Посмотреть сообщение
ну строка же
Строки они разные бывают...
0
5 / 5 / 6
Регистрация: 23.03.2018
Сообщений: 98
01.04.2018, 01:56 12
nd2,
11.04.2010, 13:56 cin И getline [В закладки] [Окно ответа] #6
Цитата Сообщение от Krist_ALL Посмотреть сообщение
Скажите что в моем коде от с?
Я думаю ***GIN*** имел ввиду что ты используешь строки в стиле Си (char*).

Krist_ALL, просто со std::string работать гораздо удобнее.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
 
int main() {
  std::string n1;
 
  std::cout <<"n1 :";
  getline(std::cin, n1);
  
  int n2;
 
  std::cout <<"n2 :";
  std::cin >> n2;
 
  std::cout << n1 << n2 <<endl;
}
Считываешь строку полностью, а потом обрезаешь как тебе надо c помощью метода std::string erase.
Link

но я не пользовался, ничего не могу сказать про cin.getline();
0
nd2
3404 / 2785 / 1251
Регистрация: 29.01.2016
Сообщений: 9,423
01.04.2018, 01:58 13
Цитата Сообщение от perevertysh Посмотреть сообщение
nd2,
И что?
0
5 / 5 / 6
Регистрация: 23.03.2018
Сообщений: 98
01.04.2018, 02:00 14
nd2, а что?
0
nd2
3404 / 2785 / 1251
Регистрация: 29.01.2016
Сообщений: 9,423
01.04.2018, 02:02 15
Цитата Сообщение от perevertysh Посмотреть сообщение
а что?
А ничего.
0
Avaddon74
01.04.2018, 02:02
  #16

Не по теме:

nd2, perevertysh, Такого конструктивного диалога я давно не встречал :D

0
5 / 5 / 6
Регистрация: 23.03.2018
Сообщений: 98
01.04.2018, 02:44 17

Не по теме:

Avaddon74, я где-т в фильме или квн такой диалог видел. ДиодиТриод кажись



Добавлено через 32 минуты

Не по теме:

Avaddon74, ааа нет, эт в Рассмеши Комика было

0
23 / 27 / 18
Регистрация: 31.03.2018
Сообщений: 424
01.04.2018, 13:33  [ТС] 18
C++
1
getline(cin, /*переменная*/, /*'знак до которого читать строку'*/);
К сожалению такой вариант не проходит. Ошибки вылетают - возможно не правильно заюзал, я еще getline(cin,) не использовал никогда.
0
5 / 5 / 6
Регистрация: 23.03.2018
Сообщений: 98
01.04.2018, 13:57 19
Iangyl, массив переназвать из string еще во что-нибудь можно попробовать.
0
nd2
3404 / 2785 / 1251
Регистрация: 29.01.2016
Сообщений: 9,423
01.04.2018, 16:03 20
Цитата Сообщение от Iangyl Посмотреть сообщение
К сожалению такой вариант не проходит.
И не пройдёт, это для std::string предназначено. Проблему с крашем решил? Если нет, то код показыай.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.04.2018, 16:03

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Возврат массива из функции
В объекте есть массив int state;, который мне нужно из него вытащить. Вижуал показывал ошибку,...

возврат динамического массива из функции
Всем привет, вот часть кода функцииchar *result=new char; int ind=0; int number=0; ...

Возврат созданного в функции массива
Верна ли следующая конструкция? void LoadArray(float* array, int &amp; count) { int fcount =...

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


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

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

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