Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
 Аватар для anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774

Пример из Пратта

23.08.2015, 09:49. Показов 2700. Ответов 39
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Немого модифицированный пример из Пратта. Для переменной snack2 при выводе cout-ом работает четко, при выводе через функцию output выносит программу(( Подскажите в чем дело?
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
#include<iostream>//2;
using namespace std;
struct CandyBar{
    char*name;
    float weight;
    int calories;
}snack={"Mocha Munch",2.3,350};
 
void foo(CandyBar &ss);
void output(CandyBar ss);
int main(){ 
    output(snack);
    CandyBar snack1;
    foo(snack1);
    //cout<<snack1.name<<" "<<snack1.weight<<" "<<snack1.calories<<endl;
    output(snack1);
    return 0;
}
void foo(CandyBar &ss){
    cout<<"input name "<<endl;
    cin>>ss.name;
    cout<<"input weight "<<endl;
    cin>>ss.weight;
    cout<<"input calories "<<endl;
    cin>>ss.calories;   
    
}
void output(CandyBar ss){
    cout<<ss.name<<" "<<ss.weight<<" "<<ss.calories<<endl;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.08.2015, 09:49
Ответы с готовыми решениями:

Алгоритм Кнута-Морриса-Пратта
здравствуйте. можете объяснить по примеру алгоритм кнута-морриса-пратта

алгоритм Кнута-Морисcа-Пратта
нужно написать программу по теме &quot;Массивы&quot;...нужно использовать алгоритм Кнута, Мориса и Пратта а я не знаю как это написать

Алгоритм Кнута, Морриса и Пратта
//описание функции алгоритма Кнута, Морриса и Пратта int KMPSearch(char *string, char *substring){ int sl, ssl; int res = -1; ...

39
 Аватар для anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
23.08.2015, 13:36  [ТС]
Студворк — интернет-сервис помощи студентам
ct0r, можно, но так объявление структуры глобальное!
0
Игогошка!
 Аватар для ct0r
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
23.08.2015, 13:43
Цитата Сообщение от anti-k Посмотреть сообщение
можно, но так объявление структуры глобальное!
Ну да, оно видно внутри этой единицы трансляции, но я думаю, что если структура нужна только тут, то писать надо так, а возможные возникающие из-за этого проблемы с другими именами решать уже с ними, а не с Bird.

Добавлено через 1 минуту
PS вообще можно еще вместо анонимного пространства имен можно завести пространство имен с характерным именем details, если Bird это именно деталь реализации.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
23.08.2015, 13:44
Цитата Сообщение от anti-k Посмотреть сообщение
можно использовать и namespace std и namespace Featherd ) (улыбнуло) одновременно?
Можно.
1
 Аватар для anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
23.08.2015, 13:45  [ТС]
Tulosba,
Просто прописать 2 using namespace?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
23.08.2015, 13:46
Цитата Сообщение от anti-k Посмотреть сообщение
Просто прописать 2 using namespace?
Да.
0
 Аватар для anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
23.08.2015, 13:50  [ТС]
ct0r, Посмотрите вот этот вариант. Ругается на присвоение chicken.name=input
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<iostream>
#include<cstring>
using namespace std;
struct Bird{
    char*name;
    float diam;
    float weight;
};
char* input();
int main(){
    Bird chicken;
    chicken.name=input;
    cout<<chicken.name<<endl;   
    
    return 0;
}
char* input(){
    char temp[80];
    cin.getline(temp,80);
    char*ptr=new char (strlen(temp)+1);
    strcpy(ptr,temp);
    return ptr;
}
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
23.08.2015, 13:56
input - это ж функция.
C++
1
chicken.name=input();
1
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
23.08.2015, 13:56
Цитата Сообщение от anti-k Посмотреть сообщение
. Ругается на присвоение chicken.name=input
Так input это функция, и вызов должен быть со скобками:
C++
1
chicken.name=input();
1
 Аватар для anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
23.08.2015, 15:10  [ТС]
castaway, Да да, спасибо! Опечаталсо( 9 час уже сижу. Пора, наверное, сходить на пиво ))

Добавлено через 1 час 11 минут
castaway, Вот опять проблема. По моему я не правильно использую delete. Можете глянуть пожалуйста.
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
#include<iostream>//6;
#include<cstring>
 
using namespace std;
namespace CandyBarr{
    struct CandyBar{
        char*name;
        float weight;
        int calories;
    };
    
}
using namespace CandyBarr;
char* input();
void input(CandyBar* &cc);
void output(CandyBar* &cc);
int main(){
    
    CandyBar* candy;
    candy=new CandyBar [3];
    candy[0].name=input();
    candy[1].name=input();
    candy[2].name=input();
    input(candy);
    output(candy);
    
    
    for(int i=0;i<3;i++){
        delete[]candy->name;
    }
    for(int i=0;i<3;i++){
        delete[]candy;
    }
    
    
    return 0;
}
char* input(){
    char temp[80];
    cin.getline(temp,80);
    char* ptr=new char[strlen(temp+1)];
    strcpy(ptr,temp);
    
    return ptr;
    
}
void input(CandyBar* & cc){
    
    for(int n=0;n<3;n++){
        cout<<"input weight and calories "<<endl;
        cin>>cc[n].weight>>cc[n].calories;
    }
    cout<<endl;
}
void output(CandyBar* & cc){
    for(int n=0;n<3;n++){
        cout<<cc[n].name<<" "<<cc[n].weight<<" "<<cc[n].calories<<endl;
    }
    cout<<endl;
}
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
23.08.2015, 15:11
C++
1
char* ptr=new char[strlen(temp+1)];
???
C++
1
char* ptr=new char[strlen(temp)+1];
0
 Аватар для anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
23.08.2015, 15:14  [ТС]
castaway, А мне кажется я понял!! Размер name не 3!!! он у нас происходит из strlen(temp)+1????

Добавлено через 1 минуту
Croessmah, размер!!!! Значит надо удалять вручную каждый!?
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
23.08.2015, 15:16
C++
1
2
3
4
    for(int i=0;i<3;i++){
        delete [] candy[i].name;
    }
    delete [] candy;
Ну и при выделении ошибка на которую указал Croessmah.
0
 Аватар для anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
23.08.2015, 15:17  [ТС]
Croessmah, Process exited after 10.85 seconds with return value 0!!!!!! Спасибо!!!
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
23.08.2015, 15:17
delete
0
 Аватар для anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
23.08.2015, 15:18  [ТС]
castaway, А какая при выделении, я не понял!!
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
23.08.2015, 15:21
Цитата Сообщение от anti-k Посмотреть сообщение
castaway, А какая при выделении, я не понял!!
Единицу не там прибавляешь.
0
 Аватар для anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
23.08.2015, 15:25  [ТС]
castaway, ААА!
C++
1
char* ptr=new char[strlen(temp)+1];
!!!!!! Спасибо!!!

Добавлено через 2 минуты
castaway, А почем, кстати
C++
1
new char(strlen(temp)+1)
и
C++
1
new char[strlen(temp)+1]
проходят, или это только у меня?!!
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
23.08.2015, 15:28
Цитата Сообщение от anti-k Посмотреть сообщение
А почем, кстати
В первом случае выделяется один символ, который инициализируется значением выражения strlen(temp)+1.
Во втором выделяется последовательность символов.
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
23.08.2015, 15:34
Цитата Сообщение от anti-k Посмотреть сообщение
Может Вы что нибудь подскажите?
Простой пример: организация меню.
Кликните здесь для просмотра всего текста
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
#include <cstdio>
 
struct Context
{
    int a;
    char b[10];
    double c;
};
 
typedef void(*pfunc_t)(Context const & ctx); // тип указателя на функцию
 
void print_a(Context const & ctx)
{
    printf("\nprinting a: %d\n", ctx.a);
}
void print_b(Context const & ctx)
{
    printf("\nprinting b: %s\n", ctx.b);
}
void print_c(Context const & ctx)
{
    printf("\nprinting c: %lf\n", ctx.c);
}
 
int main()
{
    pfunc_t const menu[] =
    {
        &print_a, &print_b, &print_c
    };
    size_t const menuSize = sizeof(menu)/sizeof(*menu);
 
    Context context = { 2, "hello", 3.14 };
    while(1)
    {
        unsigned char c = 0;
        printf("select:> ");
        while((c = getchar()) == '\n' || c == '\r');
        putchar(c);
 
        if(c == 'e' || !c)
        {
            break;
        }
        size_t idx = c - '0';
 
        if(idx < menuSize)
        {
            menu[idx](context);
        }
    }
    printf("\ndone\n");
}

http://rextester.com/IBBQNI38321
Код специально такой С-подобный, чтобы было проще в нем разобраться.

Еще примеры: callback функции, организация конечных автоматов, плагинные интерфейсы на С, и т.п.
0
 Аватар для anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
23.08.2015, 15:43  [ТС]
DrOffset, castaway, Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.08.2015, 15:43

Алгоритм Кнута - Морриса - Пратта
Доброго времени суток. Помогите,пожалуйста, написать программу поиска подстроки в строке, используя алгоритм КМП. Тип данных ushort

Алгоритм Кнута-Морриса-Пратта
Здравствуйте. Есть задание в котором необходимо найти вхождения подстроки в строку.Пример входных и выходных данных: 1 2 3 4 2 3 ...

Алгоритм Кнута Мориса и Пратта
Послушав лекцию Я просто взял и написал. Но он ли это???? вот код program lab_8_i4; {} var a:array of integer; ...

Алгоритм Кнута, Морриса и Пратта
Ребята, помогите пожалуйста!!! Задали написать программу, пыталась сама разобраться, но ничего не вышло, только еще хуже запуталась....

Алгоритм Кнута-Морриса-Пратта (КМП)
Здравствуйте, мне необходима помощь в реализации алгоритма кмп в рамках поиска подстроки в строке, когда искомых подстрок может быть...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru