Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/40: Рейтинг темы: голосов - 40, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 05.12.2018
Сообщений: 12

Передача массива строк в функцию

30.04.2019, 20:08. Показов 8164. Ответов 5

Студворк — интернет-сервис помощи студентам
Добрый вечер.
Знаю, что обнаглел, но может найдутся доброжелательные люди, которые помогут.. Также есть что критиковать
Необходимо решить задачу:
Написать прогу, которая принимает от пользователя набор строк и выводит на экран символы,
которые чаще всего встречаются в каждой из строк этого набора.

В первом варианте функция должна принимать в качестве параметра одну С-строку с передачей через указатель, во втором - одну строку класса string с передачей по ссылке.

Для хранения набора использовать массив С-строк (нужно двумерный). Далее необходимо сделать копию этого набора, для хранения копии использовать массив строк класса string, и потом для каждой строки из обоих наборов применить соответствующий вариант написанной функции. Т.о. в оба варианта функции за один раз должна передаваться только одна строка из набора, в первый вариант функции - строка из первого набора, во второй вариант функции - строка из второго набора.

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>
using namespace std;
 
char f(char *s);
char f(string &s);
void F();
 
int main()
{
    const int N = 256;
    const int row = 5;
    string sStr;
 
 
    char *cStr = new char[row];
 
    cout << "Please enter " << row << " strings, please: " << endl;
    for (int i = 0; i < row; i++)
    {
        cout << i + 1 << "." << " "; cin.getline(cStr, N);
        sStr = cStr;
        f(cStr);
        char n = f(cStr);
        cout << "Most often symbol in C: " << n << endl;
        f(sStr);
        char x = f(sStr);
        cout << "Most often symbol in S: " << x << endl;
        F();
    }
        
        
    
    system("pause");
    return 0;
}
 
char f(char *s)
{
    int findStr[256] = { 0 };
    for (int i = 0; s[i] != 0; ++i)
        findStr[s[i]]++;
    int max = 0;
    for (int i = 1; i < 256; ++i) {
        if (findStr[i] > findStr[max])
            max = i;
    }
    return max;
}
 
char f(string & s)
{
    int findStr[256] = { 0 };
    for (int i = 0; s[i] != 0; ++i)
        findStr[s[i]]++;
    int max = 0;
    for (int i = 1; i < 256; ++i) {
        if (findStr[i] > findStr[max])
            max = i;
    }
    return max;
}
 
void F()
{
    for (int i = 0; i < 1; i++)
        cout << "*********************************************************************" << endl;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.04.2019, 20:08
Ответы с готовыми решениями:

Передача динамического массива строк в функцию
что не так? программа проверяет правильность скобок для каждой строки #define _CRT_SECURE_NO_WARNINGS #include &lt;iostream&gt; ...

Передача динамического массива строк в функцию и работа с ним
Доброго времени суток. Помогите, пожалуйста. Мне нужно в программе объявить динамический массив строк, затем в пользовательской функции его...

Передача массива в функцию используя указатель на функцию
У меня имеется готовая программа без передачи функции в функцию указателем, мне нужно передать функцию ввода масива в функцию его обработки...

5
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
01.05.2019, 03:33
Необучаемый,
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
#include <iostream>
#include <string>
#include <algorithm>
 
char foo(const char* str)
{
    int buf[std::numeric_limits<unsigned char>::max() + 1]{};
    while (*str)
        ++buf[static_cast<unsigned char>(*str++)];
    return
        static_cast<char>(std::distance(
            std::begin(buf),
            std::max_element(std::begin(buf), std::end(buf))
        ));
}
 
int main()
{
    int count = 0;
    std::cin >> count >> std::ws;
 
    constexpr int str_size = 80;
    typedef char(c_str)[str_size];
 
    c_str* c_arr = new c_str[count]{};
    std::string* s_arr = new std::string[count];
 
    for (int i = 0; i < count; ++i)
    {
        std::cin.getline(c_arr[i], str_size);
        s_arr[i] = c_arr[i];
    }
 
    for (int i = 0; i < count; ++i)
        std::cout << foo(c_arr[i]) << ' ' << foo(s_arr[i].c_str()) << std::endl;
 
    delete[] c_arr;
    delete[] s_arr;
}
1
0 / 0 / 0
Регистрация: 05.12.2018
Сообщений: 12
02.05.2019, 20:02  [ТС]
zayats80888, Пушка. Ничего не понятно, но огромное спасибо
0
0 / 0 / 0
Регистрация: 05.12.2018
Сообщений: 12
04.05.2019, 11:04  [ТС]
Может есть у кого идеи как сделать задачу по тому, что я сделал?
А то даже готовая работа выше не помогает мне догнать как сделать ее самостоятельно.
0
Just Do It!
 Аватар для XLAT
4188 / 2642 / 654
Регистрация: 23.09.2014
Сообщений: 8,845
Записей в блоге: 3
04.05.2019, 15:36
Лучший ответ Сообщение было отмечено Необучаемый как решение

Решение

Цитата Сообщение от Необучаемый Посмотреть сообщение
Может есть у кого идеи как сделать задачу по тому, что я сделал?
Цитата Сообщение от Необучаемый Посмотреть сообщение
Далее необходимо сделать копию этого набора
исправил ваш код, чтобы было хоть из чего делать копию или копии,
а то как бы и не с чего делать.
все строки хранятся в двумерном массиве на который указывает переменная cStr,
имеющая тип char**

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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <iostream>
#include <string>
using namespace std;
 
char f(char *s);
char f(string &s);
void F();
void show_all_cstring(char** _str, int _n);
 
int main()
{
    const int N = 256;
    const int row = 5; 
          // amount_symbol перед выделением можно поменять на другое значение:
          int amount_symbol = 80;
    string sStr;
 
    cout << "Please enter " << row << " strings, please: " << endl;
    
    // Выделяем память под массив строк:
    char** cStr = new char*[row]; // количество строк.(место для хранения указателей на них.)
    for(int i = 0; i < row; ++i)  // количество символов(место для их хранения.)
    {   cStr[i] = new char[amount_symbol];
    }
    
    for (int i = 0; i < row; i++)
    {
        cout << i + 1 << "." << " "; cin.getline(cStr[i], 80);
        sStr = cStr[i];
        f(cStr[i]);
        char n = f(cStr[i]);
        cout << "Most often symbol in C: " << n << endl;
        f(sStr);
        char x = f(sStr);
        cout << "Most often symbol in S: " << x << endl;
        F();
    }
    
    show_all_cstring(cStr, row);
    
    // Высвобождение памяти отводимой под двумерный динамический массив:
    for (int i = 0; i < row; i++)
        delete [] cStr[i];
    delete cStr;
    
    system("pause");
    return 0;
}
 
char f(char *s)
{
    int findStr[256] = { 0 };
    for (int i = 0; s[i] != 0; ++i)
        findStr[s[i]]++;
    int max = 0;
    for (int i = 1; i < 256; ++i) {
        if (findStr[i] > findStr[max])
            max = i;
    }
    return max;
}
 
char f(string & s)
{
    int findStr[256] = { 0 };
    for (int i = 0; s[i] != 0; ++i)
        findStr[s[i]]++;
    int max = 0;
    for (int i = 1; i < 256; ++i) {
        if (findStr[i] > findStr[max])
            max = i;
    }
    return max;
}
 
void F()
{
    for (int i = 0; i < 1; i++)
        cout << "*********************************************************************" << endl;
}
 
/// По названию этой процедуры все поймут, что она делает?????
/// Если вы тоже поняли, то в будующем ВСЕГДА обзывайте так, чтобы всем было
/// понятно!
void show_all_cstring(char** _str, int _n)
{   std::cout << "\nshow_all_string()--------------------------------------:\n";
    for(int i = 0; i < _n; i++)
    {   std::cout << _str[i] << "\n";
    }
    std::cout << "... end show_all_string()------------------------------.\n\n";
}
Добавлено через 12 минут
Цитата Сообщение от Необучаемый Посмотреть сообщение
Далее необходимо сделать копию этого набора, для хранения копии использовать массив строк класса string
теперь вот можно и скопировать куда-нить, да, хоть в стринг:
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include <iostream>
#include <string>
using namespace std;
 
char f(char *s);
char f(string &s);
void F();
void show_all_cstring(char** _str, int _n);
void show_all_cstring(std::string* _str, int _n);
void copy_all_cstring_to_string(std::string* _dest, char** _str, int _n);
 
int main()
{
    const int N = 256;
    const int row = 5; 
          // amount_symbol перед выделением можно поменять на другое значение:
          int amount_symbol = 80;
    string sStr;
 
    cout << "Please enter " << row << " strings, please: " << endl;
    
    // Выделяем память под массив строк:
    char** cStr = new char*[row]; // количество строк.(место для хранения указателей на них.)
    for(int i = 0; i < row; ++i)  // количество символов(место для их хранения.)
    {   cStr[i] = new char[amount_symbol];
    }
    
    for (int i = 0; i < row; i++)
    {
        cout << i + 1 << "." << " "; cin.getline(cStr[i], 80);
        sStr = cStr[i];
        f(cStr[i]);
        char n = f(cStr[i]);
        cout << "Most often symbol in C: " << n << endl;
        f(sStr);
        char x = f(sStr);
        cout << "Most often symbol in S: " << x << endl;
        F();
    }
    
    show_all_cstring(cStr, row);
    
    std::string sStr_copy[5]; // Место для копии.
    copy_all_cstring_to_string(sStr_copy, cStr, row);
    show_all_cstring(sStr_copy, row);
    
    // Высвобождение памяти отводимой под двумерный динамический массив:
    for (int i = 0; i < row; i++)
        delete [] cStr[i];
    delete cStr;
    
    system("pause");
    return 0;
}
 
char f(char *s)
{
    int findStr[256] = { 0 };
    for (int i = 0; s[i] != 0; ++i)
        findStr[s[i]]++;
    int max = 0;
    for (int i = 1; i < 256; ++i) {
        if (findStr[i] > findStr[max])
            max = i;
    }
    return max;
}
 
char f(string & s)
{
    int findStr[256] = { 0 };
    for (int i = 0; s[i] != 0; ++i)
        findStr[s[i]]++;
    int max = 0;
    for (int i = 1; i < 256; ++i) {
        if (findStr[i] > findStr[max])
            max = i;
    }
    return max;
}
 
void F()
{
    for (int i = 0; i < 1; i++)
        cout << "*********************************************************************" << endl;
}
 
/// По названию этой процедуры все поймут, что она делает??????????????
/// Если вы тоже поняли, то в будующем ВСЕГДА обзывайте так, чтобы всем было
/// понятно!
void show_all_cstring(char** _str, int _n)
{   std::cout << "\nshow_all_cstring()-------------------------------------:\n";
    for(int i = 0; i < _n; i++)
    {   std::cout << _str[i] << "\n";
    }
    std::cout << "... end show_all_cstring()-----------------------------.\n\n";
}
 
void show_all_cstring(std::string* _str, int _n)
{   std::cout << "\nshow_all_string()--------------------------------------:\n";
    for(int i = 0; i < _n; i++)
    {   std::cout << _str[i] << "\n";
    }
    std::cout << "... end show_all_string()------------------------------.\n\n";
}
 
void copy_all_cstring_to_string(std::string* _dest, char** _str, int _n)
{   std::cout << "\ncopy_all_cstring_to_string()---------------------------:\n";
    for(int i = 0; i < _n; i++)
    {   std::cout << _str[i] << "\n";
        _dest[i] = _str[i];
        std::cout << _dest[i] << "\n";
    }
    std::cout << "... end copy_all_cstring_to_string()-------------------.\n\n";
}
1
0 / 0 / 0
Регистрация: 05.12.2018
Сообщений: 12
04.05.2019, 22:20  [ТС]
XLAT, Жесть!!!! Огромное спасибо! Сейчас буду разбираться
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.05.2019, 22:20
Помогаю со студенческими работами здесь

Передача указателя на динамический массив строк в функцию
Доброе утро! Динамически выделяю память под массив строк. char **f = (char**)malloc(LEN * sizeof(char*)); for(i=0; i&lt;LEN; i++) { ...

Передача строк в функцию со сменным количеством параметров
Нужно передать строки в функцию f со сменным количеством параметров, передача должна остановиться на указателе NULL. В функции нудно...

Передача двухмерного массива из функцию в функцию
Допустим у меня есть функция, в которой &quot;генерируется&quot; массив. Но нужно его передать в другую функцию, которая его выведет на экран. ...

Передача строки из вектора строк в функцию (исправить ошибку)
Доброго все здравия, заполняю вектор строк, затем поочередно, каждая строка вектора передается в функцию. Все работает, но появляется...

Передача двухмерного массива в функцию и изменение элемента массива
Такая проблема! Нужно передать в функцию двухмерный массив и изменить на елемент который равен 0 и если рядом по матрице находятса нули...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru