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

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

23.08.2015, 09:49. Показов 2543. Ответов 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
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 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
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,038
Записей в блоге: 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
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
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
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru