Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
angryjack93
7 / 3 / 1
Регистрация: 04.11.2012
Сообщений: 218
#1

Массив теряет значения:/ - C++

18.04.2013, 08:17. Просмотров 520. Ответов 18
Метки нет (Все метки)

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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <audiere.h>
 
using namespace std;
using namespace audiere;
 
void sound_func(char **text_sound, int kol_symb_text, int sum_words);
 
int InitialAudiere(){
    AudioDevicePtr device = OpenDevice();
    if(!device) {
        cout << "OpenDevice() failed!\n";
        return 1;
    };
}
 
void PlaySymbols(char symbol, int softness){
    char SoundFileName[6];
    SoundFileName[2] = '.';
    SoundFileName[3] = 'w';
    SoundFileName[4] = 'a';
    SoundFileName[5] = 'v';
    
    if(softness == '1') SoundFileName[1] = '\'';
    if(softness == '0') SoundFileName[1] = '$';
    
    SoundFileName[0] = symbol;
}
 
int main()
{
    char text_string[] = "";
    cout << "Please, enter text for the voice: \n";
    gets(text_string);
    int kol_symb = strlen(text_string);
    int spaces = 0;
 
    for(int i = 0; i < kol_symb; i++) {if(text_string[i] == ' ') spaces++;}
 
    int sum_words = spaces + 1;
    char **strip_words = new char* [sum_words];
    for(int i = 0; i <= sum_words; i++)
        strip_words[i] = new char [30];
    int symb_beg_word = 0;
    int p = 0; int sum_spaces = 0;
    
    for(int i = 0; i < sum_words; i++){
        int g = 0;
        for(int j = symb_beg_word; j < kol_symb; j++){
            if(text_string[j] != ' ')
            {
               strip_words[i][g] = text_string[j];
               g++;
            }
            else{
                p = j; sum_spaces = 0;
                symb_beg_word = j + sum_spaces;
                break;
            }
 
        }
    }
    sound_func(strip_words, kol_symb, sum_words);
 
    getch();
    return 0;
}
 
void sound_func(char **text_sound, int kol_symb_text, int sum_words)
{
    InitialAudiere();
    
    for(int j = 0; j < sum_words; j++){
        for(int i = 0; i < kol_symb_text; i++){
            cout << text_sound[j][i];
            switch(text_sound[j][i]){
                case 'а':
                    break;
                case 'б': 
                    if(text_sound[j][i++] == text_sound[j][i]){}
                    if(text_sound[j][i++] == 'ь'){}
                    break;
                case 'в': 
                    if(text_sound[j][i++] == text_sound[j][i]){}
                    if(text_sound[j][i++] == 'ь'){}
                    break;
                case 'г': 
                    if(text_sound[j][i++] == text_sound[j][i])
                    break;
                case 'д': 
                    if(text_sound[j][i++] == text_sound[j][i]){}
                    if(text_sound[j][i++] == 'ь'){}
                    break;          
                case 'е': 
                    if((i == 0) || (text_sound[j][i--] == ' ') || (text_sound[j][i--] == 'ъ') || (text_sound[j][i--] == 'ь') ||
                      (text_sound[j][i--] == 'а' || text_sound[j][i--] == 'А' || text_sound[j][i--] == 'е' || text_sound[j][i--] == 'Е' ||
                       text_sound[j][i--] == 'ё' || text_sound[j][i--] == 'Ё' || text_sound[j][i--] == 'и' || text_sound[j][i--] == 'И' ||
                       text_sound[j][i--] == 'о' || text_sound[j][i--] == 'О' || text_sound[j][i--] == 'у' || text_sound[j][i--] == 'У' ||
                       text_sound[j][i--] == 'ы' || text_sound[j][i--] == 'Ы' || text_sound[j][i--] == 'э' || text_sound[j][i--] == 'Э' ||
                       text_sound[j][i--] == 'ю' || text_sound[j][i--] == 'Ю' || text_sound[j][i--] == 'я' || text_sound[j][i--] == 'Я')){
                        kol_symb_text++;
                        text_sound[j][i] = 'й';
                        for(int k = i; k < kol_symb_text; k++)
                            text_sound[j][k++] = text_sound[j][k];
                        text_sound[j][i++] = 'э';
                    }
                    break;  
                case 'ё': 
                    if((i == 0) || (text_sound[j][i--] == ' ') || (text_sound[j][i--] == 'ъ') || (text_sound[j][i--] == 'ь') ||
                      (text_sound[j][i--] == 'а' || text_sound[j][i--] == 'А' || text_sound[j][i--] == 'е' || text_sound[j][i--] == 'Е' ||
                       text_sound[j][i--] == 'ё' || text_sound[j][i--] == 'Ё' || text_sound[j][i--] == 'и' || text_sound[j][i--] == 'И' ||
                       text_sound[j][i--] == 'о' || text_sound[j][i--] == 'О' || text_sound[j][i--] == 'у' || text_sound[j][i--] == 'У' ||
                       text_sound[j][i--] == 'ы' || text_sound[j][i--] == 'Ы' || text_sound[j][i--] == 'э' || text_sound[j][i--] == 'Э' ||
                       text_sound[j][i--] == 'ю' || text_sound[j][i--] == 'Ю' || text_sound[j][i--] == 'я' || text_sound[j][i--] == 'Я')){
                        kol_symb_text++;
                        text_sound[j][i] = 'й';
                        for(int k = i; k < kol_symb_text; k++)
                            text_sound[j][k++] = text_sound[j][k];
                        text_sound[j][i++] = 'о';
                    }
                    break;          
                case 'ж': 
                    if(text_sound[j][i++] == text_sound[j][i])
                    break;      
                case 'з': 
                    if(text_sound[j][i++] == text_sound[j][i]){}
                    if(text_sound[j][i++] == 'ь'){}
                    break;      
                case 'и': 
                    break;      
                case 'й': 
                    break;      
                case 'к': 
                    if(text_sound[j][i++] == text_sound[j][i]){}
                    if(text_sound[j][i++] == 'ь'){}
                    break;                       
                case 'л': 
                    if(text_sound[j][i++] == text_sound[j][i]){}
                    if(text_sound[j][i++] == 'ь'){}
                    break;      
                case 'м': 
                    if(text_sound[j][i++] == text_sound[j][i]){}
                    if(text_sound[j][i++] == 'ь'){}
                    break;                       
                case 'н': 
                    if(text_sound[j][i++] == text_sound[j][i]){}
                    if(text_sound[j][i++] == 'ь'){}
                    break;  
                case 'о':
                    break;  
                case 'п': 
                    if(text_sound[j][i++] == text_sound[j][i]){}
                    if(text_sound[j][i++] == 'ь'){}
                    break;  
                case 'р': 
                    if(text_sound[j][i++] == text_sound[j][i]){}
                    if(text_sound[j][i++] == 'ь'){}
                    break;      
                case 'с': 
                    if(text_sound[j][i++] == text_sound[j][i]){}
                    if(text_sound[j][i++] == 'ь'){}
                    break;
                case 'т': 
                    if(text_sound[j][i++] == text_sound[j][i]){}
                    if(text_sound[j][i++] == 'ь'){}
                    break;  
                case 'у':
                    break;      
                case 'ф': 
                    if(text_sound[j][i++] == text_sound[j][i]){}
                    if(text_sound[j][i++] == 'ь'){}
                    break;      
                case 'х': 
                    if(text_sound[j][i++] == text_sound[j][i]){}
                    if(text_sound[j][i++] == 'ь'){}
                    break;                       
                case 'ц': 
                    if(text_sound[j][i++] == text_sound[j][i])
                    break;
                case 'ч': 
                    if(text_sound[j][i++] == text_sound[j][i])
                    break;
                case 'ш': 
                    if(text_sound[j][i++] == text_sound[j][i])
                    break;                      
                case 'щ': 
                    if(text_sound[j][i++] == text_sound[j][i])
                    break;          
                case 'ъ':
                    break;                               
                case 'ы': 
                    if(text_sound[j][i++] == text_sound[j][i])
                    break;      
                case 'ь':
                    break;
                case 'э':
                    break;      
                case 'ю':
                    if((i == 0) || (text_sound[j][i--] == ' ') || (text_sound[j][i--] == 'ъ') || (text_sound[j][i--] == 'ь') ||
                      (text_sound[j][i--] == 'а' || text_sound[j][i--] == 'А' || text_sound[j][i--] == 'е' || text_sound[j][i--] == 'Е' ||
                       text_sound[j][i--] == 'ё' || text_sound[j][i--] == 'Ё' || text_sound[j][i--] == 'и' || text_sound[j][i--] == 'И' ||
                       text_sound[j][i--] == 'о' || text_sound[j][i--] == 'О' || text_sound[j][i--] == 'у' || text_sound[j][i--] == 'У' ||
                       text_sound[j][i--] == 'ы' || text_sound[j][i--] == 'Ы' || text_sound[j][i--] == 'э' || text_sound[j][i--] == 'Э' ||
                       text_sound[j][i--] == 'ю' || text_sound[j][i--] == 'Ю' || text_sound[j][i--] == 'я' || text_sound[j][i--] == 'Я')){
                        kol_symb_text++;
                        text_sound[j][i] = 'й';
                        for(int k = i; k < kol_symb_text; k++)
                            text_sound[j][k++] = text_sound[j][k];
                        text_sound[j][i++] = 'у';
                    }
                    break;  
                case 'я':
                    if((i == 0) || (text_sound[j][i--] == ' ') || (text_sound[j][i--] == 'ъ') || (text_sound[j][i--] == 'ь') ||
                      (text_sound[j][i--] == 'а' || text_sound[j][i--] == 'А' || text_sound[j][i--] == 'е' || text_sound[j][i--] == 'Е' ||
                       text_sound[j][i--] == 'ё' || text_sound[j][i--] == 'Ё' || text_sound[j][i--] == 'и' || text_sound[j][i--] == 'И' ||
                       text_sound[j][i--] == 'о' || text_sound[j][i--] == 'О' || text_sound[j][i--] == 'у' || text_sound[j][i--] == 'У' ||
                       text_sound[j][i--] == 'ы' || text_sound[j][i--] == 'Ы' || text_sound[j][i--] == 'э' || text_sound[j][i--] == 'Э' ||
                       text_sound[j][i--] == 'ю' || text_sound[j][i--] == 'Ю' || text_sound[j][i--] == 'я' || text_sound[j][i--] == 'Я')){
                        kol_symb_text++;
                        text_sound[j][i] = 'й';
                        for(int k = i; k < kol_symb_text; k++)
                            text_sound[j][k++] = text_sound[j][k];
                        text_sound[j][i++] = 'а';
                    }
                    break;              
            }
    }
}
}
Знаю, что много, но сам не разберусь, в чем проблема:\ В общем в функцию передаю массив динамический, а после в цикле пытаюсь его напечатать, но если в массиве будет "просто", то печатает "прос". Если убрать switch{}, то все нормально.... Подскажите, в чем проблема??
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2013, 08:17
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Массив теряет значения:/ (C++):

Половина двумерного массива теряет значения - C++
Тут код: //заголовок #ifndef MATRIX_H #define MATRIX_H #include &lt;iostream&gt; using std::istream; using std::ostream; using...

Почему указатель теряет свои значения после выхода с метода, память выделена динамически - C++
#include &lt;iostream&gt; using namespace std; void sqr( int* a, int length ); int main() { int *a = new int; int length =...

Написать программу, в которой создается двухмерный массив, значения вводятся с клавиатуры,потом значения умножаются по строкам - access violation - C++
Здравствуйте. Задание написать программу в которой создается 2-х мерный массив (размер вводится с клавиатуры),значения так же вводяться с...

Массив: Сформировать массив С, содержащий те элементы массива А, имеющие значения кратные М, которые есть в массиве В. - C++
Сформировать одномерный массив С , содержащий те элементы исходных массивов А и (или) В, которые указаны в задании. Элементы массива А,...

Записать в массив B длины всех серий исходного массива, а в массив C - значения элементов, образующих серии - C++
Ребята выручите пожалуйста) 1)Дан целочисленный массив A размера N. Назовем серией группу подряд идущих одинаковых элементов, а длиной...

Поле класса теряет информацию - C++
Есть класс class anagramma{ map&lt;string, list&lt;string&gt; &gt; data; public: void operator ()(string d) { if(data.begin() ==...

18
Tulosba
:)
Эксперт С++
4705 / 3240 / 297
Регистрация: 19.02.2013
Сообщений: 9,046
18.04.2013, 11:51 #2
angryjack93, я думаю, у Вас проблема с регулярным декрементом/инкрементом во втором индексе text_sound. Вы понимаете, что значит запись i++, i-- ?
0
angryjack93
7 / 3 / 1
Регистрация: 04.11.2012
Сообщений: 218
18.04.2013, 14:25  [ТС] #3
Цитата Сообщение от Tulosba Посмотреть сообщение
angryjack93, я думаю, у Вас проблема с регулярным декрементом/инкрементом во втором индексе text_sound. Вы понимаете, что значит запись i++, i-- ?
Ну вроде i = 1;
а text_sound[j][1+1] тогда
0
Tulosba
:)
Эксперт С++
4705 / 3240 / 297
Регистрация: 19.02.2013
Сообщений: 9,046
18.04.2013, 14:40 #4
Цитата Сообщение от angryjack93 Посмотреть сообщение
Ну вроде i = 1;
а text_sound[j][1+1] тогда
i++; равнозначно i = i+1; т.е. i меняется. А теперь посмотрите сколько изменений происходит в какой-нибудь case 'ю'.
1
angryjack93
7 / 3 / 1
Регистрация: 04.11.2012
Сообщений: 218
18.04.2013, 15:00  [ТС] #5
Цитата Сообщение от Tulosba Посмотреть сообщение
i++; равнозначно i = i+1; т.е. i меняется. А теперь посмотрите сколько изменений происходит в какой-нибудь case 'ю'.
хм) походу я сглупил сильно)))

Добавлено через 3 минуты
А каким образом мне тогда обратиться к следующему элементу?
0
Tulosba
:)
Эксперт С++
4705 / 3240 / 297
Регистрация: 19.02.2013
Сообщений: 9,046
18.04.2013, 15:02 #6
Цитата Сообщение от angryjack93 Посмотреть сообщение
А каким образом мне тогда обратиться к следующему элементу?
можно просто i+1, т.е. без присваивания. Или завести временную переменную и использовать ее уже:
C++
1
2
int nexti = i+1;
text_sound[j][nexti] ...
1
shuffle
19 / 19 / 1
Регистрация: 30.03.2013
Сообщений: 35
18.04.2013, 15:03 #7
Цитата Сообщение от angryjack93 Посмотреть сообщение
А каким образом мне тогда обратиться к следующему элементу?
Вместо text_sound[j][i--] пишите text_sound[j][i - 1], аналогично для +. Не совмещайте обращение к элементам массива и изменение счетчика в одной инструкции.
1
Tulosba
18.04.2013, 15:05
  #8

Не по теме:

Цитата Сообщение от shuffle Посмотреть сообщение
Не совмещайте обращение к элементам массива и изменение счетчика в одной инструкции.
Иногда это удобно и более лаконично. Просто надо понимать что делаешь.

0
shuffle
18.04.2013, 15:11
  #9

Не по теме:

Цитата Сообщение от Tulosba Посмотреть сообщение
Иногда это удобно и более лаконично. Просто надо понимать что делаешь.
Согласен с вами. Совет относится к новичку. Особенно в подобном коде, в котором на результат влияет семантика ленивых вычислений оператора ||.

1
angryjack93
7 / 3 / 1
Регистрация: 04.11.2012
Сообщений: 218
19.04.2013, 08:11  [ТС] #10
хм, а почему у меня при замене на такой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
for(int i = 0; i < kol_symb_text; i++){
        cout << text_sound[j][i];
            switch(text_sound[j][i]){
                case 'а':
                    cout << "\n" << text_sound[j][i];
                    break;
                case 'б': 
                    cout << "\n" << text_sound[j][i];
                    if(text_sound[j][i+1] == text_sound[j][i]){}
                    if(text_sound[j][i+1] == 'ь'){}
                    break;
                case 'в': 
                    cout << "\n" << text_sound[j][i];
                    if(text_sound[j][i+1] == text_sound[j][i]){}
                    if(text_sound[j][i+1] == 'ь'){}
                    break;
Тут в общем при любых буквах пробегает по всем ветвям case. В общем снова ввожу "просто", а выводит:
"пр
рос
ст
то"

Должно же только по определенной ветви идти? ИЛи я не прав?
0
Tulosba
:)
Эксперт С++
4705 / 3240 / 297
Регистрация: 19.02.2013
Сообщений: 9,046
19.04.2013, 08:42 #11
Цитата Сообщение от angryjack93 Посмотреть сообщение
Тут в общем при любых буквах пробегает по всем ветвям case. В общем снова ввожу "просто", а выводит:
"пр
рос
ст
то"

Должно же только по определенной ветви идти? ИЛи я не прав?
Чего вообще Вы хотите добиться? Если не понятно как ветвится программа - запустите под отладчиком.
0
angryjack93
7 / 3 / 1
Регистрация: 04.11.2012
Сообщений: 218
19.04.2013, 09:05  [ТС] #12
Цитата Сообщение от Tulosba Посмотреть сообщение
Чего вообще Вы хотите добиться? Если не понятно как ветвится программа - запустите под отладчиком.
Я хочу, чтобы от одной буквы шло по ветви с той же буквой, а не чтобы у меня при "р" шло по ветке "а":\
0
Tulosba
:)
Эксперт С++
4705 / 3240 / 297
Регистрация: 19.02.2013
Сообщений: 9,046
19.04.2013, 09:33 #13
Цитата Сообщение от angryjack93 Посмотреть сообщение
Я хочу, чтобы от одной буквы шло по ветви с той же буквой, а не чтобы у меня при "р" шло по ветке "а":\
Я имел в виду логику более высокого уровня. Что должна делать программа? Приведите итоговый код, где ветвление идет не так, как Вам хочется.
0
angryjack93
7 / 3 / 1
Регистрация: 04.11.2012
Сообщений: 218
20.04.2013, 12:28  [ТС] #14
Первый пост - вся программа. Суть ее работы: помещаем в двумерный массив разбитый на слова другой, одномерный массив. Передаем двумерный в функцию, где Каждый элемент проверяется (какая буква этот элемент) и в зависимости от буквы идет по определенной ветви. Сами ветки ничего пока что не делают...
Если это не то, что вам надо, то я не в курсе, что еще написать:\

Вся конструкция switch идет неправильно.

Добавлено через 20 часов 46 минут
Похоже, что идей ни у кого нет(

Добавлено через 11 минут
Хм, оказывается дело в кодировке:\ НО! Если я ставлю system("chcp 1251"), то вся кириллица выводиться непонятными иероглифами, но работает правильно... идет по нужной ветке. Пробовал ставить chcp 65001, но тогда русские буквы вообще не выводит. Какую кодировку ставить не пойму:/
0
Tulosba
:)
Эксперт С++
4705 / 3240 / 297
Регистрация: 19.02.2013
Сообщений: 9,046
20.04.2013, 14:12 #15
Цитата Сообщение от angryjack93 Посмотреть сообщение
Первый пост - вся программа.
В строке 34 не выделена память, надо хотя бы так:
C++
1
char text_string[100] = "";
Отсюда возможны разные нюансы поведения.
1
20.04.2013, 14:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2013, 14:12
Привет! Вот еще темы с ответами:

Заменяемые значения вывести в массив В. Вывести на экран полученную матрицу и массив B. - C++
Помогите пжл. Задана матрица Z(5,5). Если в строке есть хотя бы один нулевой элемент, то найти произведение всех ненулевых элементов,...

Breakpoint: при попытке вывести элементы класса указатель теряет начальное значение - C++
При попытке вывести элементы класса указатель теряет начальное значение. template&lt;typename T&gt; void Graph&lt;T&gt;::print() { ...

Почему не полностью работает программа шифрования? шифрует ок, а дешифрирует плохо, теряет последние 2 символа - C++
вот так. Помогите с проблемой. #include &lt;vcl&gt; #include &lt;conio&gt; #include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;string&gt; ...

Массив произвольного значения - C++
Здравствуйте, как построить массив заранее неизвестного значения, ну например int n; cin &gt;&gt; n; int arr;


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

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

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