Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.76
fenix117
8 / 8 / 1
Регистрация: 16.03.2011
Сообщений: 249
#1

Как в структуре задать массив строк фиксированного размера? - C++

11.07.2011, 19:03. Просмотров 2819. Ответов 12
Метки нет (Все метки)

Как в структуре задать массив строк фиксированного размера? я попытался так
C++
1
2
3
4
struct pupil
{
string a[5];
}
Оказалось я задал длину строки(
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2011, 19:03     Как в структуре задать массив строк фиксированного размера?
Посмотрите здесь:
Создать ассоциативный массив фиксированного размера C++
C++ Почему в массив фиксированного размера N возможно записать элементов больше, чем N ?
Массив фиксированного размера может быть динамическим? Что такое "динамический массив"? C++
C++ Случайным образом заполнить двумерный массив фиксированного размера целыми числами в заданном диапазоне
C++ Как выделить память под массив в структуре?
C++ Задан вещественный массив размера N. Создать целочисленный массив такого же размера, в котором будут записаны индексы исходного массива в порядке во
C++ Дан массив A размера N. Сформировать новый массив B того же размера по следующему правилу:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Форумчанин
Эксперт С++
4511 / 2853 / 227
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 1
Завершенные тесты: 1
11.07.2011, 19:14     Как в структуре задать массив строк фиксированного размера? #2
Цитата Сообщение от fenix117 Посмотреть сообщение
Оказалось я задал длину строки(
??? Это массив строк!
insolent
826 / 347 / 15
Регистрация: 30.01.2009
Сообщений: 1,204
11.07.2011, 19:15     Как в структуре задать массив строк фиксированного размера? #3
Все правильно, а длина если было string str(5)
fenix117
8 / 8 / 1
Регистрация: 16.03.2011
Сообщений: 249
11.07.2011, 19:22  [ТС]     Как в структуре задать массив строк фиксированного размера? #4
insolent, подскажи как заполнить структуру, пытался просто присваивать, выдает ошибку не сущ подходящей функции перевода из sring в string*
Kastaneda
Форумчанин
Эксперт С++
4511 / 2853 / 227
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 1
Завершенные тесты: 1
11.07.2011, 19:23     Как в структуре задать массив строк фиксированного размера? #5
C++
1
2
3
4
5
        std::string s[5];
    for(int i=0;i<5;i++)
        std::cin>>s[i];
    for(int i=0;i<5;i++)
        std::cout<<s[i]<<std::endl;
fenix117
8 / 8 / 1
Регистрация: 16.03.2011
Сообщений: 249
11.07.2011, 19:41  [ТС]     Как в структуре задать массив строк фиксированного размера? #6
у меня уже есть строка, ее надо присвоить элементу массива строк, просто присвоить не получается из-за указателя, я не знаю как надо записать
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.07.2011, 19:51     Как в структуре задать массив строк фиксированного размера? #7
Цитата Сообщение от fenix117 Посмотреть сообщение
у меня уже есть строка, ее надо присвоить элементу массива строк, просто присвоить не получается из-за указателя, я не знаю как надо записать
показывайте
fenix117
8 / 8 / 1
Регистрация: 16.03.2011
Сообщений: 249
11.07.2011, 20:00  [ТС]     Как в структуре задать массив строк фиксированного размера? #8
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
struct Questions
{ 
    string question;    // вопрос
    string *answer [5]; // варианты ответов
    char right;         // номер эталонного ответа
};
void read_questions (vector <Questions> &Q)
{
    setlocale(LC_ALL, "Russian");
    string question, answer;
    Questions vopros;
    char simvol, etalon;
    int i;
    const bool key=true;//для вечного цикла, выход по окончании чтения файла
    ifstream potok("question.bin");
    if (potok.is_open())
    {
        while(key)
        {
            //читаем вопрос
            while (!potok.eof())
            {
                simvol=potok.get();
                simvol=Decode (simvol);
                if (simvol=='@')
                    break;
                question+=simvol;
            }
            if (potok.eof()) //защита на случай, если файл закончился, не встретив знак окончания вопроса ('@')
            {potok.close(); return;}
            vopros.question=question;
            question.clear();
            //читаем ответы
            i=0;
            while (i<5)
            {
                while (!potok.eof())
                {
                    simvol=potok.get();
                    simvol=Decode (simvol);
                    if (simvol=='@')
                        break;
                    answer+=simvol;
                }
                vopros.answer[i]=answer;//вот тут неправильная строка
                answer.clear();
                i++;
            }
            //читаем номер правильного ответа
            etalon=potok.get();
            etalon=Decode(etalon);
            vopros.right=etalon;
            simvol=potok.get();//читаем последний символ вопроса, чтобы можно было читать следующий вопрос
            Q.push_back(vopros);
        }
    }
    else
        cout<<"Файл question.bin не был открыт на чтение"<<endl;
}
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.07.2011, 20:02     Как в структуре задать массив строк фиксированного размера? #9
Цитата Сообщение от fenix117 Посмотреть сообщение
string *answer [5];
а нахрена вам 5 указателей на std::string? используйте просто std::string a[5]; и присваивайте ему что угодно
fenix117
8 / 8 / 1
Регистрация: 16.03.2011
Сообщений: 249
11.07.2011, 20:22  [ТС]     Как в структуре задать массив строк фиксированного размера? #10
у меня почему-то нулевой элемент присваивает как надо а остальные пропускает
Kastaneda
Форумчанин
Эксперт С++
4511 / 2853 / 227
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 1
Завершенные тесты: 1
11.07.2011, 20:27     Как в структуре задать массив строк фиксированного размера? #11
C++
1
2
3
4
5
6
struct Questions
{ 
        string question;        // вопрос
        string answer [5];     // ЗДЕСЬ ЗВЕЗДОЧКА НЕ НУЖНА
        char right;                     // номер эталонного ответа
};
fenix117
8 / 8 / 1
Регистрация: 16.03.2011
Сообщений: 249
11.07.2011, 20:43  [ТС]     Как в структуре задать массив строк фиксированного размера? #12
Цитата Сообщение от fenix117 Посмотреть сообщение
у меня почему-то нулевой элемент присваивает как надо а остальные пропускает
ПОЧЕМУ??? (я думал что я в структуре объявляю не массив а длину строки, мало ли всякое бывает, отсюда и вышла история со звездочкой)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2017, 10:41     Как в структуре задать массив строк фиксированного размера?
Еще ссылки по теме:
Массив: Как можно задать и вывести симметричный двумерный массив? C++
Сравнение строк в структуре C++
C++ Сравнивание строк в структуре
Сравнение строк в структуре C++
C++ Сравнение строк в структуре, чтение из файла

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

Или воспользуйтесь поиском по форуму:
JavaFX2
0 / 0 / 0
Регистрация: 21.07.2016
Сообщений: 16
08.01.2017, 10:41     Как в структуре задать массив строк фиксированного размера? #13
Не стал создавать новую тему. Вопрос у меня смежный.

c++11
Имеется структура:
C++
1
2
3
4
5
6
7
8
9
10
11
struct _Cube {
    const int NUM_VERTICES = 8;
    const int N = NUM_VERTICES * 3; // странно, но тут работает
    const Point VERTICES[NUM_VERTICES] { // а тут ошибка компиляции - invalid use of non-static data member _Cube::NUM_VERTICES
        ... // массив точек куба
    };
} Cube;
 
struct _Pyramid {
    ...
} Pyramid;
Весь смысл в том, что поля структуры Cube используются в моем коде по сути как константы, но сгруппированные в одну структуру. Чтобы потом в коде использовать удобную запись Cube.NUM_VERTICES и Cube.VERTICES. Разумеется, дублировать число, написав VERTICES[8], нет никакого желания.

Работает только так:
C++
1
2
3
4
5
6
7
struct _Cube {
    static const int NUM_VERTICES = 8; // static!
    const int N = NUM_VERTICES * 3;
    const Point VERTICES[NUM_VERTICES] {
        ...
    };
} Cube;
Но на StackOverflow пишут:
Язык позволяет создавать статические переменные члены и для класса и для структуры. Проблема заключается только в том, что они не принадлежат своему классу (структуре), а просто находятся в его области видимости
Можете пояснить этот момент? Насколько это "не принадлежат структуре" нарушает принцип использования таких вот структур в качестве хранилища констант? А может я в целом применил неверный подход? Тогда как лучше всего группировать константы в С++? Например, похожим образом у меня есть константы Application.TITLE, Aplication.WIDTH. Не писать же в одной "свалке" APP_TITLE, CUBE_NUM_VERTICES, CUBE_VERTICES, PYRAMID_NUM_VERTICES и т.д... В Java я бы использовал специальный класс и задал бы ему статические поля. Но здесь, к сожалению (или к счастью) нужно сделать без использования классов.
Yandex
Объявления
08.01.2017, 10:41     Как в структуре задать массив строк фиксированного размера?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru