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

Поле как фактический параметр функции

27.02.2023, 06:19. Показов 476. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! У меня есть структура:
C++
1
2
3
4
5
6
7
8
9
struct videofilm 
{
    string name_film;
    string producer;
    string genre;
    string kino_studio;
    string country;
    int    year;
};
И ввод:
C++
1
2
3
4
5
6
7
8
9
10
11
void full_lib (videofilm *libus, const int n)
{
    string a; getline (cin, a);
    printf ("| Название фильма: "); getline ( cin,  libus[n].name_film   );
    printf ("| Режиссёр: ");        getline ( cin,  libus[n].producer    );
    printf ("| Жанр: ");            getline ( cin,  libus[n].genre       );
    printf ("| Киностудия: ");      getline ( cin,  libus[n].kino_studio );
    printf ("| Страна: ");          getline ( cin,  libus[n].country     );
    printf ("| Год выпуска: ");     scanf   ("%d", &libus[n].year        ); 
    while (libus[n].year > 2023 || libus[n].year < 1888) { printf("\n| Введите год от 1888 до 2023\n\n>> "); scanf ("%d", &libus[n].year); }
}
Я хочу написать функцию, которая будет удалять лишние пробелы из строки, но не знаю как передать строку.
Я пробовал сделать как-то так:
C++
1
2
3
4
5
6
void SpaceDelete(string buf) {} //Писал и string и videofilm, не работает
 
void full_lib (videofilm *libus, const int n)
{
    printf ("| Название фильма: "); getline ( cin,  libus[n].name_film   ); SpaceDelete (libus[n].name_film);
}

Помогите пожалуйста, я не хочу писать пять функций удаления пробелов
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.02.2023, 06:19
Ответы с готовыми решениями:

Как можно использовать фактический параметр у метода?
ситуация примерно такая: class A { int a; public : int get_a() { return a; } };

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

Формальный и фактический параметр
http://s15.***********/i188/1011/3b/87e27ba53c3b.jpg на картинке отметил 1 и 2 помогите найти формальный и фактический параметр и...

2
 Аватар для Sunseodaero
27 / 18 / 9
Регистрация: 26.02.2023
Сообщений: 62
27.02.2023, 07:31
Лучший ответ Сообщение было отмечено hWacha как решение

Решение

Вот функция, которая удаляет лишние пробелы из переданной ей строки:
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
void SpaceDelete(string& str)
{
    // Удаляем пробелы в начале строки
    size_t startpos = str.find_first_not_of(" \t");
    if (startpos != string::npos)
        str = str.substr(startpos);
 
    // Удаляем пробелы в конце строки
    size_t endpos = str.find_last_not_of(" \t");
    if (endpos != string::npos)
        str = str.substr(0, endpos+1);
 
    // Удаляем лишние пробелы между словами
    bool inside_word = false;
    string result;
    for (char c : str)
    {
        if (c == ' ' || c == '\t')
        {
            if (!inside_word)
            {
                inside_word = true;
                result += ' ';
            }
        }
        else
        {
            inside_word = false;
            result += c;
        }
    }
    str = result;
}
Чтобы передать строку в эту функцию, нужно передать ее по ссылке (используя оператор &):
C++
1
2
3
4
5
6
7
8
9
10
void full_lib (videofilm *libus, const int n)
{
    printf ("| Название фильма: "); getline ( cin,  libus[n].name_film   ); SpaceDelete(libus[n].name_film);
    printf ("| Режиссёр: ");        getline ( cin,  libus[n].producer    ); SpaceDelete(libus[n].producer);
    printf ("| Жанр: ");            getline ( cin,  libus[n].genre       ); SpaceDelete(libus[n].genre);
    printf ("| Киностудия: ");      getline ( cin,  libus[n].kino_studio ); SpaceDelete(libus[n].kino_studio);
    printf ("| Страна: ");          getline ( cin,  libus[n].country     ); SpaceDelete(libus[n].country);
    printf ("| Год выпуска: ");     scanf   ("%d", &libus[n].year        ); 
    while (libus[n].year > 2023 || libus[n].year < 1888) { printf("\n| Введите год от 1888 до 2023\n\n>> "); scanf ("%d", &libus[n].year); }
}
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12930 / 6798 / 1820
Регистрация: 18.10.2014
Сообщений: 17,205
27.02.2023, 07:44
Цитата Сообщение от Sunseodaero Посмотреть сообщение
нужно передать ее по ссылке (используя оператор &)
Никакого отношения к "оператору &" это не имеет даже отдаленно.

Цитата Сообщение от hWacha
C++
1
2
    printf ("| Страна: ");          getline ( cin,  libus[n].country     ); SpaceDelete(libus[n].country);
    printf ("| Год выпуска: ");     scanf   ("%d", &libus[n].year        );
Непонятно, зачем понадобилось смешивать ввод/вывод через cin и через scanf...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.02.2023, 07:44
Помогаю со студенческими работами здесь

Фактический параметр должен быть переменной
Что значит &quot;Фактический параметр должен быть переменной&quot; ? Вот код программы program lalala; const n=5; Type ...

Поле как параметр
Доброго времени суток! На днях стыкнулся с следующей проблемой: Есть класс (Допустим название А) public class A { public...

Как в delphi в процедуре объявить массив как параметр а затем в самой программе напечатать его в поле label
Помогите пожалуйста выдает ошибку &quot;Project PShifr6.exe raised exception class EaccessViolation vith message ' access violation at address...

Тип переменных в функции, передаваемой как параметр другой функции
есть функция static int filesort(const void *va, const void *vb) { dirent **a=(dirent **) va, **b=(dirent **) vb; ... }

Передача функции как параметр другой функции
Можно ли сделать вот так: Сама функция: void test(void first(), void second()); { if (/*Условие*/) { ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
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. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru