2 / 2 / 2
Регистрация: 11.10.2016
Сообщений: 123
1

Заполнить элементы массива структур

23.01.2019, 20:39. Показов 545. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть структура:
C++
1
2
3
4
5
6
struct Myword
{
    char word[80];
    int n;
    int it;
};
Есть просто массив
C++
1
arr_row = {4,4,1,1,2}
Есть массив структур на на n элементов.
C++
1
Myword *arr = new Myword[countWord];
n = 4 + 4 + 1 + 1 + 2;
n = 12

Мне нужно в массиве структур сделать так:
arr[0].it = 1;
arr[1].it = 2;
arr[2].it = 3;
arr[3].it = 4;
arr[4].it = 1;
arr[5].it = 2;
arr[6].it = 3;
arr[7].it = 4;
arr[8].it = 1;
arr[9].it = 1;
arr[10].it = 1;
arr[11].it = 2;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.01.2019, 20:39
Ответы с готовыми решениями:

Сжать массив, удалив из него все элементы, которые лежат в интервале [a,b]. Освободившиеся в конце элементы массива заполнить нулями.
У меня такая проблема: Сжать массив, удалив из него все элементы, которые лежат в интервале ....

Сжать массив, удалив из него все элементы, модуль которых находится в интервале [a, b]. освободившиеся в конце массива элементы заполнить нулями.
Сжать массив, удалив из него все элементы, модуль которых находится в интервале . освободившиеся в...

Сжать массив, удалив из него все элементы, модуль которых находится в интервале [a,b]. Освободившиеся в конце массива элементы заполнить нулями
В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1. максимальный элемент...

Как поменять местами элементы массива структур?
В ходе решения задачи возникла проблема: необходимо поменять местами элементы массива записей. Как...

8
223 / 150 / 79
Регистрация: 14.03.2016
Сообщений: 459
23.01.2019, 20:46 2
А в чем проблема? Как конкретно вам нужно это сделать?
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
//так?
#include <iostream>
using namespace std;
 
struct Myword
{
    char word[80];
    int n;
    int it;
};
 
int main()
{
    int arr_row[] = {4, 4, 1, 1, 2};
    int count = 0;
    for(auto el : arr_row) count += el;
    
    Myword arr = new Myword[count];
    
    arr[0].it = 1;
    arr[1].it = 2;
    arr[2].it = 3;
    arr[3].it = 4;
    arr[4].it = 1;
    arr[5].it = 2;
    arr[6].it = 3;
    arr[7].it = 4;
    arr[8].it = 1;
    arr[9].it = 1;
    arr[10].it = 1;
    arr[11].it = 1;
    arr[12].it = 2;
    
    delete[] Myword;
    return 0;
}
0
2 / 2 / 2
Регистрация: 11.10.2016
Сообщений: 123
23.01.2019, 20:51  [ТС] 3
Цитата Сообщение от Cortas Посмотреть сообщение
А в чем проблема? Как конкретно вам нужно это сделать?
Нужен алгоритм, так как значения могут меняться.
0
223 / 150 / 79
Регистрация: 14.03.2016
Сообщений: 459
23.01.2019, 20:53 4
Elllik, по какому правилу заполнять массив arr?
0
2 / 2 / 2
Регистрация: 11.10.2016
Сообщений: 123
23.01.2019, 20:54  [ТС] 5
Цитата Сообщение от Cortas Посмотреть сообщение
по какому правилу заполнять массив arr?
Да именно это
0
223 / 150 / 79
Регистрация: 14.03.2016
Сообщений: 459
23.01.2019, 21:16 6
Цитата Сообщение от Elllik Посмотреть сообщение
Да именно это
Эмм... на мой вопрос нельзя ответить да или нет. :/

Добавлено через 10 минут
Что же, как я понимаю из этой темы, проблему которой вы не осветили в этой, в переменной it вашей структуры должен хранится номер этого слова в строке, так?
0
2 / 2 / 2
Регистрация: 11.10.2016
Сообщений: 123
23.01.2019, 21:21  [ТС] 7
Цитата Сообщение от Cortas Посмотреть сообщение
Эмм... на мой вопрос нельзя ответить да или нет. :/
Звучало, что вы поняли, в чем мне нужна помощь)
Миниатюры
Заполнить элементы массива структур  
0
2 / 2 / 2
Регистрация: 11.10.2016
Сообщений: 123
23.01.2019, 21:29  [ТС] 8
Цитата Сообщение от Cortas Посмотреть сообщение
Что же, как я понимаю из этой темы, проблему которой вы не осветили в этой, в переменной it вашей структуры должен хранится номер этого слова в строке, так?
Да, а в массиве row, количество слов, а размерность этого массива, это количество строк.
0
223 / 150 / 79
Регистрация: 14.03.2016
Сообщений: 459
23.01.2019, 22:14 9
Вот ответа на эту тему:
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
#include <iostream>
 
using namespace std;
 
struct Myword
{
    char word[80];
    int it; 
};
 
int main()
{
    int arr_row[] = { 4, 4, 1, 1, 2 };
    int size = end(arr_row) - begin(arr_row);
    int count = 0;
    for(auto el : arr_row) count += el;
    
    Myword *arr = new Myword[count];
 
    for(int i = 0, cur = 0; i < size; i++)
        for(int j = 1; j <= arr_row[i]; j++)
            arr[cur++].it = j;
 
    for(int i = 0; i < count; i++)
        cout << arr[i].it << endl;
 
    return 0;
}
Добавлено через 41 минуту
А так бы выглядел ответ на ту тему:
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <iostream>
#include <conio.h>
#include <Windows.h>
#include <fstream>
#include <string>
 
using namespace std;
 
struct Myword
{
    //char word[80]; если не принципиально, то лучше использовать класс string
    string word;
    int it; 
};
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    ifstream fin("test.txt");
 
    //в этом цикле считаем кол-во слов
    int words = 0;
    while(fin)
    {
        string temp;
        //читаем целую строку
        getline(fin, temp);
        //если строка не была строкой, содержащий символ окончания файла
        //то считаем в ней кол-во слов
        if(fin)
        {
            //идем по строке
            for(int i = 1; i < temp.size(); i++)
                //рассматриваются символы по типу "ю ", значит там было какое-то слово
                //(слово длиной в 1 букву тоже слово)
                if(temp[i - 1] != ' ' && temp[i] == ' ')
                    words++;
            //если строка кончилась, но у неё на конце не было пробела, 
            //например "это строка", ты мы не посчитали последнее слово!
            if(temp[temp.size() - 1] != ' ') words++;
        }
    }
    //чтобы не переоткрывать файл, просто возвращаем курсор в начало
    fin.clear();
    fin.seekg(0, ios::beg);
    
    //создаем массив
    Myword *arr = new Myword[words];
 
    int cur = 0;
    while(fin)
    {
        string temp;
        //опять читаем строку
        getline(fin, temp);
        if(fin)
        {
            //разбиваем строку на слова
            //from - начало слово, wi - индекс слова в строке
            int from = 0, wi = 1;
            for(int i = 1; i < temp.size(); i++)
                //смотрим по тому же условию, по которому считали кол-во слов
                if(temp[i - 1] != ' ' && temp[i] == ' ')
                {
                    //силами класса string создаем подстроку из строки temp
                    //и запихиваем её в текущее слово
                    arr[cur].word = temp.substr(from, i - from);
                    //ставим индекс слову
                    arr[cur].it = wi++;
                    //переходим на след. элемент.
                    cur++;
                    //запоминаем позицию после пробела, а именно
                    //просто увеличиваем i, пока не дойдем до сл. слова
                    //или конца строки
                    while(temp[i] && temp[i] == ' ') i++;
                    from = i;
                }
            //руководствуясь тем же принципом, что и при подсчете слов,
            //записываем последнее слово строки в массив
            if(temp[temp.size() - 1] != ' ')
            {
                arr[cur].word = temp.substr(from, temp.size() - from);
                arr[cur].it = wi;
                cur++;
            }
        }
    }
 
    //выводим
    for(int i = 0; i < words; i++)
        cout << arr[i].it << " - " << arr[i].word << endl;
 
    //очищаем память
    delete[] arr;
    //стопим консоль
    _getch();
    return 0;
}
0
23.01.2019, 22:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.01.2019, 22:14
Помогаю со студенческими работами здесь

Выровнять элементы массива структур согласно степени двойки
Нужно написать небольшую программу на с++. Если есть большой массив структур, то нужно делать...

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

Заполнить массив случайными числами, вывести элементы массива в 2 строки
помогите пожалуйста. (заполнить массив S(1..20) случайным образом числами из интервала от 0 до 100....

Заполнить массив B значениями элементов массива A, исключив из него повторяющиеся элементы
Добрый вечер! Задача стоит так: Заполнить массив B значениями элементов массива A, исключив из...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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