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

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

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

ЧТо не так в коде? - C++

02.05.2013, 16:32. Просмотров 294. Ответов 7
Метки нет (Все метки)

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
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <vector>
 
using namespace std;
 
vector< vector<char> > name_files;
 
void sound_func(vector< vector<char> > text_sound, int kol_symb_text, int sum_words);
 
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;     //считаем кол-во слов
    vector < vector<char> > strip_words(sum_words);
    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 = 1;
                symb_beg_word = j + sum_spaces;
                break;
            }
 
        }
    }
    cout << strip_words[0].size();
    for(int i = 0; i < sum_words; i++) kol_symb += strip_words[i].size();
    name_files.reserve(kol_symb);
    cout << "\n" << kol_symb << "\n";
    sound_func(strip_words, kol_symb, sum_words);
 
    getch();
    return 0;
}
 
void sound_func(vector< vector<char> > text_sound, int kol_symb_text, int sum_words)
{
    char consonants[20] = "bcdfghklmnprstvwxyz"; int conson = 0;
    for(int j = 0; j < sum_words; j++){         
        kol_symb_text = text_sound[j].size();
        for(int i = 0; i < kol_symb_text; i++){
               }
    }
}
В общем-то запускается, но после ввода текста зависает напрочь Где я напутал?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2013, 16:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос ЧТо не так в коде? (C++):

Что в коде ни так? while не работает так, как ожидаю - C++
Написанный код, как я думаю, должен выдавать цифры от 0 до 1000, столбиком. Но выдает начиная от 702 до 1000. Что ни так понимаю, где...

Что не так в коде? - C++
Должен записывать значения в файл, а начинается так называемая &quot;матрица&quot; и в файл записывается число -858993460. #include &quot;stdafx.h&quot; ...

что в коде не так? - C++
#include &lt;string.h&gt; #include &lt;iomanip&gt; #include &lt;conio.h&gt; #include &lt;fstream&gt; #include &lt;stdlib.h&gt; #include &lt;windows.h&gt; void...

Что не так в коде? - C++
Дано натуральное число N. Если число содержит 5 цифр, то получить новое число М, которое образуется путем исключения средней цифры...

Что не так в коде? - C++
Вообщем, вся суть в том, чтобы пользователь задавал элементы массива, а программа потом эти числа выводила на экран, но в итоге она в...

что в коде не так? - C++
#include&lt;iostream&gt; #include&lt;cstdio&gt; #include&lt;cstdlib&gt; #include&lt;string&gt; #include&lt;algorithm&gt; #include&lt;vector&gt; using...

7
DiffEreD
1430 / 767 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
02.05.2013, 17:09 #2
angryjack93, не особо вникал в ваш код, но походу у вас где то выход за пределы массивов. Разбивать строку на слова можно и другими, более наглядными способами, к примеру:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
 
int main()
{
    std::string s = "world okno opera adc conan stryna argentina akter";
    //std::getline(std::cin, s); //или ручной ввод
    
    std::istringstream iss(s);
    std::vector<std::string> words;
    for (std::string temp; iss>>temp; iss)
        words.push_back(temp);
    std::cout<<"All words:\n";
    for (int i = 0; i<words.size(); ++i)
        std::cout<<words[i]<<"\n";
    
    return 0;
}
Не понял что делает функция sound_func, но она крайне не эффективна - значения по ссылках передавать надо. К примеру так:
C++
1
void sound_func(const vector<vector<char>>& text_sound, int& kol_symb_text, int sum_words)
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.05.2013, 17:33 #3
C++
1
 char text_string[] = "";
Задайте массив достаточного размера.
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
02.05.2013, 19:13 #4
Цитата Сообщение от alsav22 Посмотреть сообщение
Задайте массив достаточного размера.
Вот странно, да. Вектор использует, а стрингами побрезговал почему-то.
1
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.05.2013, 19:31 #5
Тут всё в куче: С, С++, STL...
0
angryjack93
7 / 3 / 1
Регистрация: 04.11.2012
Сообщений: 218
02.05.2013, 19:36  [ТС] #6
Цитата Сообщение от Tulosba Посмотреть сообщение
Вот странно, да. Вектор использует, а стрингами побрезговал почему-то.
Просто писал давно, а про векторы только недавно прочел Переделаю еще...

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
    vector < vector<char> > strip_words(sum_words);
    char seps[] = ", \n\r\t"; int i = 0;
    char *token = strtok(text_string, seps);
    while(token != NULL){
        strip_words[i].push_back(*token);
        token = strtok(NULL, seps);
        i++;
    }
В общем сделал так разбиение на слова (так в интернете нашел и у людей все равботает). Программа больше не зависает, НО теперь она вместо всего слова помещает только первую букву(
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
02.05.2013, 19:54 #7
Цитата Сообщение от angryjack93 Посмотреть сообщение
Программа больше не зависает, НО теперь она вместо всего слова помещает только первую букву
Я бы всё же порекомендовал использовать string вместо vector<char>. Но если уж хочется добавлять слово в имеющийся контейнер, вероятно надо переписать строку 5 на нечто подобное:
C++
1
2
char* p = token;
while( *p ) strip_words[i].push_back(*p++);
1
angryjack93
7 / 3 / 1
Регистрация: 04.11.2012
Сообщений: 218
02.05.2013, 20:12  [ТС] #8
Цитата Сообщение от Tulosba Посмотреть сообщение
Я бы всё же порекомендовал использовать string вместо vector<char>. Но если уж хочется добавлять слово в имеющийся контейнер, вероятно надо переписать строку 5 на нечто подобное:
C++
1
2
char* p = token;
while( *p ) strip_words[i].push_back(*p++);
Огромное спасибо, помогло!!!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2013, 20:12
Привет! Вот еще темы с ответами:

проверьте что не так в коде? - C++
#include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #include &lt;time.h&gt; int main() { int i,j,n=9; int a; srand(time(NULL)); ...

Подскажите, что не так в коде - C++
void sortofalpfavit(WORKER* st, int n) { int i,j; for (i = 0; i &lt; n; i++) { for ( j = i + 1; j &lt; n; j++) //...

Что не так в моем коде? - C++
Код для расчета этой формулы. Делал по примеру. Запускаю, а вместо чисел inf. #include&lt;iostream&gt; ...

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


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
02.05.2013, 20:12
Ответ Создать тему
Опции темы

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