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

исправить функцию нахождения гласных букв в массиве - C++

Восстановить пароль Регистрация
 
Jack63
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 13
03.10.2011, 00:39     исправить функцию нахождения гласных букв в массиве #1
Помогите,пожалуйста, исправить функцию, которая суммирует вероятности нахождения букв в строке(строка массив типа char,слова разделены пробелами). Если хотя бы в одном слове нет гласных букв,то вероятность строки считаем 0. Если во всех словах есть гласные буквы,то вероятность равна сумме вероятностей всех букв в строке.
вроде просто сделать, но как только не пробовал - не получается. исправить нужно до 24.00 (мск)

этот вариант выдает все нули

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
double functionVer(const char buffer[],int i) 
        {
         double ver=0;
         int u[50];
         int gh=0;
        for(int k=0;k<i;k++) 
        {
                  if(buffer[k]==char(65)) {  u[gh]++; ver+=7.96;       u[gh]++;}
                  if(buffer[k]==char(66)) {ver+=1.6;}
                  if(buffer[k]==char(67)) {ver+=2.48;}
                      if(buffer[k]==char(68)) {ver+=4.01;}
                      if(buffer[k]==char(69)) {  u[gh]++; ver+=12.86;    }
                      if(buffer[k]==char(70)) {ver+=2.62;}
                      if(buffer[k]==char(71)) {ver+=1.99;}
                  if(buffer[k]==char(72)) {ver+=5.39;}
                       if(buffer[k]==char(73)) { u[gh]++; ver+=7.77;      }
            if(buffer[k]==char(74)) {ver+=0.16;}
            if(buffer[k]==char(75)) {ver+=0.41;}
            if(buffer[k]==char(76)) {ver+=3.51;}
            if(buffer[k]==char(77)) {ver+=2.43;}
            if(buffer[k]==char(78)) {ver+=7.51;}
            if(buffer[k]==char(79)) { u[gh]++; ver+=6.62;      }
            if(buffer[k]==char(80)) {ver+=1.81;}
            if(buffer[k]==char(81)) {ver+=0.17;} //нет в таблице - подправить;
            if(buffer[k]==char(82)) {ver+=6.83;}
            if(buffer[k]==char(83)) {ver+=6.62;}
            if(buffer[k]==char(84)) {ver+=9.72;}
            if(buffer[k]==char(85)) { u[gh]++; ver+=2.48;    }
            if(buffer[k]==char(86)) {ver+=1.15;}
            if(buffer[k]==char(87)) {ver+=1.8;}
            if(buffer[k]==char(88)) {ver+=0.17;}
            if(buffer[k]==char(89)) {u[gh]++; ver+=1.52;      }
            if(buffer[k]==char(90)) {ver+=0.05;}
            if(buffer[k]==(' ')) {  u[gh++]; } 
 
        }
             while(gh!=0) {
            if (u[gh]==0)
                  {return ver=0.0;}
                u[gh]--;
             }
            return ver;
     
        }
этот оставляет все как есть(т.е. не зануляет вероятности где нужно)

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
double functionVer(const char buffer[],int i) //вероятность для n-ой строки;
        {
         double ver=0;
         int u=0;
        for(int k=0;k<i;k++) 
        {
            if(buffer[k]==char(65)) {  u++; ver+=7.96;     }
            if(buffer[k]==char(66)) {ver+=1.6;}
            if(buffer[k]==char(67)) {ver+=2.48;}
                        if(buffer[k]==char(68)) {ver+=4.01;}
                        if(buffer[k]==char(69)) {  u++; ver+=12.86;    }
                        if(buffer[k]==char(70)) {ver+=2.62;}
                        if(buffer[k]==char(71)) {ver+=1.99;}
            if(buffer[k]==char(72)) {ver+=5.39;}
            if(buffer[k]==char(73)) { u++; ver+=7.77;      }
            if(buffer[k]==char(74)) {ver+=0.16;}
            if(buffer[k]==char(75)) {ver+=0.41;}
            if(buffer[k]==char(76)) {ver+=3.51;}
            if(buffer[k]==char(77)) {ver+=2.43;}
            if(buffer[k]==char(78)) {ver+=7.51;}
            if(buffer[k]==char(79)) { u++; ver+=6.62;      }
            if(buffer[k]==char(80)) {ver+=1.81;}
            if(buffer[k]==char(81)) {ver+=0.17;} //нет в таблице - подправить;
            if(buffer[k]==char(82)) {ver+=6.83;}
            if(buffer[k]==char(83)) {ver+=6.62;}
            if(buffer[k]==char(84)) {ver+=9.72;}
            if(buffer[k]==char(85)) { u++; ver+=2.48;    }
            if(buffer[k]==char(86)) {ver+=1.15;}
            if(buffer[k]==char(87)) {ver+=1.8;}
            if(buffer[k]==char(88)) {ver+=0.17;}
            if(buffer[k]==char(89)) {u++; ver+=1.52;      }
            if(buffer[k]==char(90)) {ver+=0.05;}
            if(buffer[k]==(' ')) {if (u=0) { return ver = 0;} else u=0; }
 
        }
          
            return ver;
     
        }
Добавлено через 1 час 41 минуту
помогите,пожалуйста
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
03.10.2011, 01:58     исправить функцию нахождения гласных букв в массиве #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
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
#include <iostream>
#include <cstring>
 
using namespace std;
 
const double prob_table[]
{
    7.96,  // A
    1.6,   // B
    2.48,  // C
    4.01,  // D
    12.86, // E
    2.62,  // F
 
    // дальше заполняйте таблицу сами
 
    0,     // G
    0,     // H
    0,     // ...
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,    // X
    0,    // Y
    0     // Z
};
 
bool isvowel( char c )
{
    c = toupper( c );
    return c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U' || c == 'Y';
}
 
double count_prob( const char * str )
{
    double prob = 0;
    char prev;
    bool has_vowels = false;
 
    while( *str )
    {
        if( isspace( *str ) )
        {
            if( !isspace( prev ) )
            {
                // если в предыдущем слове не было гласных
                if( !has_vowels )
                   return 0;
 
                // в новом слове пока не было гласных
                has_vowels = false;
            }
        }
        else
        {
            if( isalpha( *str ) )
                prob += prob_table[ toupper(*str) - 'A' ];
 
            if( isvowel( *str ) )
                has_vowels = true;
        }
 
        prev = *str;
        str++;
    }
 
    return prob;
}
 
int main()
{
    char *str1 = "hello world";
    char *str2 = "aaloha";
    char *str3 = "no hell below us, above us only sky";
    char *str4 = "hello bwvzxt world";
 
    cout << "str1: " << str1 << " - " << count_prob( str1 ) << '\n'
         << "str2: " << str2 << " - " << count_prob( str2 ) << '\n'
         << "str3: " << str3 << " - " << count_prob( str3 ) << '\n'
         << "str4: " << str4 << " - " << count_prob( str4 ) << '\n';
 
    return 0;
}
Удачи.
Jack63
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 13
03.10.2011, 02:01  [ТС]     исправить функцию нахождения гласных букв в массиве #3
спасибо большое!
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
04.10.2011, 18:13     исправить функцию нахождения гласных букв в массиве #4
А еще, если пишем на C++, то можно воспользоваться std::map.
talis
 Аватар для talis
789 / 541 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
04.10.2011, 18:15     исправить функцию нахождения гласных букв в массиве #5
fasked, можно, но есть ли смысл? Поиск в дереве и обращение по индексу - это несколько разные по производительности вещи
Yandex
Объявления
04.10.2011, 18:15     исправить функцию нахождения гласных букв в массиве
Ответ Создать тему
Опции темы

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