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

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

Войти
Регистрация
Восстановить пароль
 
Pirokar
4 / 4 / 0
Регистрация: 21.10.2012
Сообщений: 54
#1

Исчезают значения в массиве символов в структуре - C++

07.05.2013, 16:12. Просмотров 201. Ответов 0
Метки нет (Все метки)

Доброго времени дня! Помогите, пожалуйста, уважаемые! Уже мозги сломал ((( Думал, что вроде бы все просто, но сейчас я просто в тупике (((
В общем есть массив структур. Каждая структура представляет собой русское слово и порядковый номер первой буквы этого слова в русском алфавите. В программе задается строка, затем подсчитывается, сколько всего слов в строке, создается массив структур на нужное количество элементов, и потом в поле каждой структуры посимвольно копируется слово из строки. Так вот здесь и проблема. Как только следующее слово посимвольно скопировалось, предыдущее слово в предыдущей структуре заменяется на какой-то мусор! И в итоге если у нас три слова копировались посимвольно, то на экран выводится только одно последнее (((
Очень на Вас рассчитываю! Вот код:
Кликните здесь для просмотра всего текста
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
101
102
103
104
105
106
107
#include <iostream>
#include <stdio.h>
#include <string>
#include <locale>
typedef struct{
    int letter;
    char wrd[];
    } Word;
 
using namespace std;
 
void bubbleSort(Word* arr, int lng)
{
    int i, j;
    Word tmp;
 
    for(i = 0; i < lng - 1; ++i) // i - номер прохода
    {
        for(j = 0; j < lng - 1; ++j) // внутренний цикл прохода
        {
            if (arr[j + 1].letter < arr[j].letter)
            {
                tmp = arr[j + 1];
                arr[j + 1] = arr[j];
                arr[j] = tmp;
            }
        }
    }
 
}
int main()
{
    setlocale(LC_ALL,"Russian");
    int rus_count = 0;
    int j = 0;
    int i, k;
    bool russian = true;
    char str[] = "Это большая лаба";
    cout << "\nИсходная строка: " << str;
    char *st = str;
    for (; ; st++)
    {
        if (isalpha(*st))
        {
            while ((*st != ' ') && (*st != '\0'))
                st++;
            rus_count++;
        }
        if (*st == '\0') break;
    }
    Word mass[rus_count]; //Сортируемый массив
 
    for (i = 0, k = 0; str[k-1] != '\0' ; k++, i++)
    {
        if (isalpha(str[k]))
        {
            while ((str[k] != ' ') && (str[k] != '\0'))
            {
                mass[i].wrd[j++] = str[k];
                k++;
            }
         mass[i].wrd[j] = '\0';
         j = 0;
         if ((mass[i].wrd[0] == 'А') || (mass[i].wrd[0] == 'а')) mass[i].letter = 1;
         else if ((mass[i].wrd[0] == 'Б') || (mass[i].wrd[0] == 'б')) mass[i].letter = 2;
         else if ((mass[i].wrd[0] == 'В') || (mass[i].wrd[0] == 'в')) mass[i].letter = 3;
         else if ((mass[i].wrd[0] == 'Г') || (mass[i].wrd[0] == 'г')) mass[i].letter = 4;
         else if ((mass[i].wrd[0] == 'Д') || (mass[i].wrd[0] == 'д')) mass[i].letter = 5;
         else if ((mass[i].wrd[0] == 'Е') || (mass[i].wrd[0] == 'е')) mass[i].letter = 6;
         else if ((mass[i].wrd[0] == 'Ё') || (mass[i].wrd[0] == 'ё')) mass[i].letter = 7;
         else if ((mass[i].wrd[0] == 'Ж') || (mass[i].wrd[0] == 'ж')) mass[i].letter = 8;
         else if ((mass[i].wrd[0] == 'З') || (mass[i].wrd[0] == 'з')) mass[i].letter = 9;
         else if ((mass[i].wrd[0] == 'И') || (mass[i].wrd[0] == 'и')) mass[i].letter = 10;
         else if ((mass[i].wrd[0] == 'Й') || (mass[i].wrd[0] == 'й')) mass[i].letter = 11;
         else if ((mass[i].wrd[0] == 'К') || (mass[i].wrd[0] == 'к')) mass[i].letter = 12;
         else if ((mass[i].wrd[0] == 'Л') || (mass[i].wrd[0] == 'л')) mass[i].letter = 13;
         else if ((mass[i].wrd[0] == 'М') || (mass[i].wrd[0] == 'м')) mass[i].letter = 14;
         else if ((mass[i].wrd[0] == 'Н') || (mass[i].wrd[0] == 'н')) mass[i].letter = 15;
         else if ((mass[i].wrd[0] == 'О') || (mass[i].wrd[0] == 'о')) mass[i].letter = 16;
         else if ((mass[i].wrd[0] == 'П') || (mass[i].wrd[0] == 'п')) mass[i].letter = 17;
         else if ((mass[i].wrd[0] == 'Р') || (mass[i].wrd[0] == 'р')) mass[i].letter = 18;
         else if ((mass[i].wrd[0] == 'С') || (mass[i].wrd[0] == 'с')) mass[i].letter = 19;
         else if ((mass[i].wrd[0] == 'Т') || (mass[i].wrd[0] == 'т')) mass[i].letter = 20;
         else if ((mass[i].wrd[0] == 'У') || (mass[i].wrd[0] == 'у')) mass[i].letter = 21;
         else if ((mass[i].wrd[0] == 'Ф') || (mass[i].wrd[0] == 'ф')) mass[i].letter = 22;
         else if ((mass[i].wrd[0] == 'Х') || (mass[i].wrd[0] == 'х')) mass[i].letter = 23;
         else if ((mass[i].wrd[0] == 'Ц') || (mass[i].wrd[0] == 'ц')) mass[i].letter = 24;
         else if ((mass[i].wrd[0] == 'Ч') || (mass[i].wrd[0] == 'ч')) mass[i].letter = 25;
         else if ((mass[i].wrd[0] == 'Ш') || (mass[i].wrd[0] == 'ш')) mass[i].letter = 26;
         else if ((mass[i].wrd[0] == 'Щ') || (mass[i].wrd[0] == 'щ')) mass[i].letter = 27;
         else if ((mass[i].wrd[0] == 'Э') || (mass[i].wrd[0] == 'э')) mass[i].letter = 31;
         else if ((mass[i].wrd[0] == 'Ю') || (mass[i].wrd[0] == 'ю')) mass[i].letter = 32;
         else if ((mass[i].wrd[0] == 'Я') || (mass[i].wrd[0] == 'я')) mass[i].letter = 33;
        }
    }
 
 
    Word *mas = &mass[0];
    bubbleSort(mas, rus_count);
 
 
cout << "\nОтсортированный массив структур: ";
for(i = 0; i < rus_count; i++)
    cout << "\n" << mass[i].wrd << " Номер: " << mass[i].letter << endl;
 
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2013, 16:12     Исчезают значения в массиве символов в структуре
Посмотрите здесь:

В массиве символов поменять местами значения парных и непарных элементов - C++
В одномерном массиве символов нужно поменять местами значения на парных и непарных элементах. Но при этом, если в массиве несколько...

Массив символов в структуре - C++
Подскажите, пожалуйста, как объявить структуру, в которой первый элемент - массив массивов символов (например: werrtyfg ...

Таблица на двумерном массиве или структуре - C++
Задача: Написать программу со вводом имен 10 студентов, вводом 10 оценок каждому, вывод результата в виде таблицы с подсчетом ср. арифм....

Как присвоить значения структуре? - C++
У меня есть структура с картами (масть и достоинство карты): struct Card { char mast; char dostoinstvo; } Таких карт...

Не могу присовить структуре значения и записать в файл - C++
struct data { int id; char name; char grupp; } data1; int _tmain(int argc, _TCHAR* argv) { char x = &quot;sss&quot;;...

Ошибки в структуре Date. Каким-то образом перетекают значения между екземплярами. - C++
У меня получилась вот такая структура: main.cpp //#include &quot;stdafx.h&quot; #include &quot;Date_class.h&quot; void main(){ Date_class...

Подсчет символов в массиве - C++
Я только начал изучать С++, в терминах еще плаваю, прошу помочь с решением задачки. Подсчет символов в массиве. Ввожу строку, программа...

Замена символов в массиве - C++
Продолжая переводить лабы из паскаля в C++ Имеем такой код на паскале: var a:string; p,i:byte; begin writeln('введи текст для...

Мусор в массиве символов - C++
Есть класс, который при создании принимает текстовый массив, который будет являться числом, число записывается в int массив, определяется...

Подсчет символов в массиве - C++
с клавиатуры вводится массив, необходимо, что программа подсчитала количество каждого символа в массиве (ниже написанный код), но......


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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