Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/55: Рейтинг темы: голосов - 55, средняя оценка - 4.75
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 84
1

Как описать строки в структуре?

22.03.2010, 17:39. Показов 11544. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую всех :)
Только учусь писать на с++ (жаль, что в универе он у нас "полностью на самостоятельном изучении"). И вот возникла необходимость создания "базы данных", куда бы заносилась некоторая информация (какая - понятно из текста задачи, но это не важно). На данном этапе я хочу организовать ввод данных (аналог типа "записи" на паскале), но возникает проблема с введением целой строки. Облазил кучу форумов и не смог разобраться, как мне в структуре описать строку. Тут, как я посмотрю, какая - то фишка, ибо классический ввод массива чаров здесь не прокатывает.. Хелп плиз.. =)
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
// Lab4.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
#include <clocale>
#include <conio.h>
#include <stdlib.h>
 
using namespace std;
int n=1;
 
int vvod();
int vivod();
 
 
struct avto
{
    union 
    {
        struct
        {
            char fio,model,colour;
            int god,data;
        };
        int t[5];
    };
};
avto a[20];
int main()
{
    setlocale(LC_CTYPE,"Russian");
    cout<<"                               Добро пожаловать!\n\n\n";
    cout<<"Сколько записей нужно сделать?\n";
    cin>>n;
    vvod();
    vivod();
    _getch();
}
 
int vvod()
{
    if ((n>0)&(n<21))
    {
        cout<<"Теперь введите "<<n<<" записей\n"; //Подправить падежи
        for (int i=0;i<n;i++)
        {
            avto;
            cout<<"Введите ФИО владельца авто\n";
            cin>>a[i].fio;
            cout<<"Введите модель\n";
            cin>>a[i].model;
            cout<<"Введите цвет\n";
            cin>>a[i].colour;
            cout<<"Введите год выпуска\n";
            cin>>a[i].god;
            cout<<"Введите год прохождения техосмотра\n";
            cin>>a[i].data;
        }
 
    }
    return 0;
}
int vivod()
{
    cout<<a[2].fio;
    return 0;
    _getch();
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.03.2010, 17:39
Ответы с готовыми решениями:

Как описать в структуре строку не через указатель
Есть структура struct InfoBuf { size_t Len; char Data; / ??? static InfoBufType*...

Как описать элемент Bitmap в структуре
Как описать в структуре состоящей из элементов типа int и TBitmap последний. struct { int d;...

Структуры и строки (как поменять значение строки в структуре?)
Вопрос: как поменять значение строки в структуре? То есть, есть такой код: struct CandyBar;...

Ввод строки в структуре, заданной как char *str через scanf (ПОМОЩЬ)
struct {char *str;} A; scanf(&quot;%s&quot;, &amp;A.str); Аварийное завершение программы после ввода. Если...

11
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
22.03.2010, 17:44 2
C++
1
2
//...
char fio[25], model[25], colour[10];
0
2 / 2 / 1
Регистрация: 18.10.2009
Сообщений: 14
22.03.2010, 17:45 3
Вот пример объявления строки.
C++
1
2
3
4
5
6
7
8
9
10
11
#include <cstring> //объявляем класс строк
 
int main()
{
      string TestStr1, TestStr2, TestStr3; //3 переменные типа строки
      TestStr1="Программирование ";
      TestStr2="рулит!";
      TestStr3=TestStr1+TestStr2;
      printf("%s",TestStr3); //В итоге на экран выведется фраза "Программирование рулит!"
      getch();
}
Функции для работы со строками посмотри в интернете или справочнике. З.Ы. Не забывай подключать класс cstring когда работаешь со строками
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
22.03.2010, 17:47 4
Еще напутано с вложенностью структур-объединений. Достаточно было бы сделать так:
C++
1
2
3
4
5
6
7
8
9
union avto
{
   struct
   {
      char fio[25], model[25], colour[10];
      int god, data;
   } st;
   int t[5];
};
0
2 / 2 / 1
Регистрация: 18.10.2009
Сообщений: 14
22.03.2010, 17:48 5
Цитата Сообщение от Nameless One Посмотреть сообщение
C++
1
2
//...
char fio[25], model[25], colour[10];

Это резонно использовать в Си, ну зачем это использовать в плюсах когда есть замечательный класс cstring?? И проблем с ним меньше)
0
302 / 160 / 62
Регистрация: 27.02.2010
Сообщений: 317
22.03.2010, 17:48 6
Считать строку с пробелами можно с помощью cin.getline(buf, SIZE), где buf - переменная, куда считываем, SIZE - размер переменной.
0
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 84
22.03.2010, 17:50  [ТС] 7
О, спасибо вам, сейчас попробую..
cstring?
Можно пример?
И пример с гетлайном хотелось бы..
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
22.03.2010, 17:52 8
Также у тебя внутри объединения объявлена безымянная структура, и при этом не создается ни одного ее экземпляра, т.е. ты никак не сможешь добраться до полей этой структуры (то же самое и с объединением)

Добавлено через 1 минуту
И вообще, не понятно в контексте задачи, почему нельзя ограничится одной структурой:
C++
1
2
3
4
5
struct avto
{
      char fio[25], model[25], colour[10];
      int god, data;
};
0
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 84
22.03.2010, 17:53  [ТС] 9
Nameless One, вот,ч то получается:
1>c:\users\leonidus\documents\visual studio 2010\projects\lab4\lab4\lab4.cpp(47): error C2039: 'fio' : is not a member of 'avto'
1> c:\users\leonidus\documents\visual studio 2010\projects\lab4\lab4\lab4.cpp(18) : see declaration of 'avto'
1>c:\users\leonidus\documents\visual studio 2010\projects\lab4\lab4\lab4.cpp(49): error C2039: 'model' : is not a member of 'avto'
1> c:\users\leonidus\documents\visual studio 2010\projects\lab4\lab4\lab4.cpp(18) : see declaration of 'avto'
1>c:\users\leonidus\documents\visual studio 2010\projects\lab4\lab4\lab4.cpp(51): error C2039: 'colour' : is not a member of 'avto'
1> c:\users\leonidus\documents\visual studio 2010\projects\lab4\lab4\lab4.cpp(18) : see declaration of 'avto'
1>c:\users\leonidus\documents\visual studio 2010\projects\lab4\lab4\lab4.cpp(53): error C2039: 'god' : is not a member of 'avto'
1> c:\users\leonidus\documents\visual studio 2010\projects\lab4\lab4\lab4.cpp(18) : see declaration of 'avto'
1>c:\users\leonidus\documents\visual studio 2010\projects\lab4\lab4\lab4.cpp(55): error C2039: 'data' : is not a member of 'avto'
1> c:\users\leonidus\documents\visual studio 2010\projects\lab4\lab4\lab4.cpp(18) : see declaration of 'avto'
1>c:\users\leonidus\documents\visual studio 2010\projects\lab4\lab4\lab4.cpp(63): error C2039: 'fio' : is not a member of 'avto'
1> c:\users\leonidus\documents\visual studio 2010\projects\lab4\lab4\lab4.cpp(18) : see declaration of 'avto'
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
22.03.2010, 17:55 10
Цитата Сообщение от Repak5 Посмотреть сообщение
Это резонно использовать в Си, ну зачем это использовать в плюсах когда есть замечательный класс cstring?? И проблем с ним меньше)
Никто и не спорит, но тогда уж лучше подключать ни cstring, a string (по крайней мере, в моей IDE), т.к. для строк из cstring'a не перегружены операции ввода-вывода в стандарные потоки.

Добавлено через 51 секунду
Leonidus, все потому, что
Цитата Сообщение от Nameless One Посмотреть сообщение
у тебя внутри объединения объявлена безымянная структура, и при этом не создается ни одного ее экземпляра, т.е. ты никак не сможешь добраться до полей этой структуры (то же самое и с объединением)
0
7 / 7 / 1
Регистрация: 22.03.2010
Сообщений: 84
22.03.2010, 17:57  [ТС] 11
Если использовать одну структуру, то всё работает, спасибо.
Теперь просто интересно, что надо сделать, чтобы всё это описалось в объединении.. Хотя на данном этапе моего развития это врятли пригодится..)

Добавлено через 1 минуту
Всё, спасибо. Сейчас всё прочитаю подробно и пойму. =)
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
22.03.2010, 18:10 12
Опять-таки говорю, не вижу смысла во вложенных структурах, объединениях в контексте данной задачи (тем более, что объединения, ввиду своей специфики, используются довольно редко).
В принципе, это можно было бы сделать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
struct mystruct
{
   union
   {
      struct
      {
         int f;
      } mys;
   } myu;
};
 
int main()
{   
    mystruct s;
    s.myu.mys.f=15;
    std::cout << s.myu.mys.f << std::endl;
    system("pause");
    return 0;
}
Здесь мы объявляем безымянные объединение и структуру, но при этом создаем по одному их экземпляру, что в дальнейшем позволит нам добраться до содержимого "внутренней" структуры.

Добавлено через 4 минуты
О, спасибо вам, сейчас попробую..
cstring?
Можно пример?
И пример с гетлайном хотелось бы..
Вот пример программы, которая выводит в консоль свой исходный код (пусть исходник называется "main.cpp"):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <fstream>
#include <string>
 
int main()
{   
    std::ifstream ifs("main.cpp");
    std::string string;
    while(std::getline(ifs, string))
        std::cout << string << std::endl;
    system("pause");
    return 0;
}
0
22.03.2010, 18:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.03.2010, 18:10
Помогаю со студенческими работами здесь

Не могу не как описать не которые строки в программе
что обозначаеться prn_matrix int last_min

Описать процедуру, записывающую слова списка как строки
type слово = array of char; список = аrrау of слово; Описать процедуру зап(l, t), записывающую...

Перестановка верхней и нижней строки в структуре
Привет. Я вам тут покушать принес. В массиве структур нужно поменять местами верхнюю и нижнюю...

Проверить принадлежность строки определенной структуре
Можно как-то определить имеет ли строка определенную структуру. Например есть строки...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru