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

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

Восстановить пароль Регистрация
 
angryjack93
7 / 3 / 1
Регистрация: 04.11.2012
Сообщений: 218
02.05.2013, 16:32     ЧТо не так в коде? #1
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++){
               }
    }
}
В общем-то запускается, но после ввода текста зависает напрочь Где я напутал?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2013, 16:32     ЧТо не так в коде?
Посмотрите здесь:

C++ Не понимаю,что не так в коде
C++ что в коде не так?
Что не так в моем коде? C++
C++ проверьте что не так в коде?
что в коде не так? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 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)
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.05.2013, 17:33     ЧТо не так в коде? #3
C++
1
 char text_string[] = "";
Задайте массив достаточного размера.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
02.05.2013, 19:13     ЧТо не так в коде? #4
Цитата Сообщение от alsav22 Посмотреть сообщение
Задайте массив достаточного размера.
Вот странно, да. Вектор использует, а стрингами побрезговал почему-то.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
02.05.2013, 19:31     ЧТо не так в коде? #5
Тут всё в куче: С, С++, STL...
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++;
    }
В общем сделал так разбиение на слова (так в интернете нашел и у людей все равботает). Программа больше не зависает, НО теперь она вместо всего слова помещает только первую букву(
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
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++);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2013, 20:12     ЧТо не так в коде?
Еще ссылки по теме:

C++ Не могу понять, что не так в коде
Что не так в коде? C++
C++ Что не так в коде?

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

Или воспользуйтесь поиском по форуму:
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++);
Огромное спасибо, помогло!!!
Yandex
Объявления
02.05.2013, 20:12     ЧТо не так в коде?
Ответ Создать тему
Опции темы

Текущее время: 17:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru