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

Вывести те слова из текста на экран, которые отсортированы по количеству гласных букв - C++

Восстановить пароль Регистрация
 
 
dfsdfgfsdg
0 / 0 / 0
Регистрация: 14.07.2015
Сообщений: 16
14.07.2015, 17:51     Вывести те слова из текста на экран, которые отсортированы по количеству гласных букв #1
Дали написать программу "В файле есть текст, вывести слова из текста на экран, которые отсортированы по количеству гласных букв" Работаю в Visual Studio C++. Желательно самыми простыми функциями и если можно с описанием.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2015, 17:51     Вывести те слова из текста на экран, которые отсортированы по количеству гласных букв
Посмотрите здесь:

C++ Удалить слова которые содержат непарное количество гласных букв
C++ Строки: Вывести на экран только те слова, которые отличаются от последнего и в которых нет повторяющихся букв.
C++ Необходимо выделить из текста слова в которых количество гласных букв парная
C++ Вывести из текста слова с четным количеством гласных букв
Вывести на экран количество гласных букв в строке C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sn1p3rOk
 Аватар для Sn1p3rOk
281 / 168 / 66
Регистрация: 19.04.2014
Сообщений: 1,078
Завершенные тесты: 2
14.07.2015, 17:53     Вывести те слова из текста на экран, которые отсортированы по количеству гласных букв #2
Нужно написать программу. Не супер сложную
Ваши наброски где ?
dfsdfgfsdg
0 / 0 / 0
Регистрация: 14.07.2015
Сообщений: 16
14.07.2015, 17:58  [ТС]     Вывести те слова из текста на экран, которые отсортированы по количеству гласных букв #3
Цитата Сообщение от Sn1p3rOk Посмотреть сообщение
Ваши наброски где ?
Если бы я знал как это делать, хотя бы что то, думаю не обратился бы сюда. Так что, к сожалению, нету даже набросков.
Я задавал тут недавно такой вопрос, прислали такой код.
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
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
// функция подсчета количества гласных
int vowels(string s)
{
    string t="aeyuio";
    int count=0;
    for(size_t i=0;i<s.size();i++)
        for(size_t j=0;j<t.size();j++)
            if(s[i]==t[j])
            {
                count++;
                break;
            }
    return count;
}
// функция сравнения по количеству гласных
bool funcCompare(string s1,string s2)
{
    int n1=vowels(s1);
    int n2=vowels(s2);
    return n1<n2;
}
int main()
{
  vector<string> v;
  // вводим слова из файла file.txt
  ifstream fin("file.txt");
  string s;
  while(fin>>s)
      v.push_back(s);
  // сортируем STL алгоритмом sort в соответствии с критерием в функции funcCompare
  sort(v.begin(),v.end(),funcCompare);
  // выводим
  for(size_t i=0;i<v.size();i++)
      cout<<v[i]<<' ';
  cout<<endl;
  system("pause");
}
Sn1p3rOk
 Аватар для Sn1p3rOk
281 / 168 / 66
Регистрация: 19.04.2014
Сообщений: 1,078
Завершенные тесты: 2
14.07.2015, 18:05     Вывести те слова из текста на экран, которые отсортированы по количеству гласных букв #4
Цитата Сообщение от dfsdfgfsdg Посмотреть сообщение
Я задавал тут недавно такой вопрос, прислали такой код.
Ну и? Чем не устраивает ?
dfsdfgfsdg
0 / 0 / 0
Регистрация: 14.07.2015
Сообщений: 16
14.07.2015, 18:11  [ТС]     Вывести те слова из текста на экран, которые отсортированы по количеству гласных букв #5
Цитата Сообщение от Sn1p3rOk Посмотреть сообщение
Ну и? Чем не устраивает ?
Извиняюсь. Я когда стал проверять, стал считать "j" за гласную, хотя в коде её нету и подумал что он не сортирует.
Если вам не сложно. Можете в этом коде сделать пояснения. Т.к. не очень пока что разбираюсь и не все команды знаю. Буду очень благодарен.
S_el
1908 / 1503 / 296
Регистрация: 15.12.2013
Сообщений: 5,921
14.07.2015, 18:14     Вывести те слова из текста на экран, которые отсортированы по количеству гласных букв #6
dfsdfgfsdg, прокомментируйте код как понимаете,а если у вас будут ошибки,мы поправим.
dfsdfgfsdg
0 / 0 / 0
Регистрация: 14.07.2015
Сообщений: 16
14.07.2015, 18:14  [ТС]     Вывести те слова из текста на экран, которые отсортированы по количеству гласных букв #7
А можно как то заменить
"#include <algorithm>
#include <vector>"
Просто нам ещё этого не преподавали!
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
14.07.2015, 18:16     Вывести те слова из текста на экран, которые отсортированы по количеству гласных букв #8
Цитата Сообщение от dfsdfgfsdg Посмотреть сообщение
А можно как то заменить
"#include <algorithm>
algorighm нужен для сортировки ( ф-я std::sort ), если без него, то придется сортировать вручную
dfsdfgfsdg
0 / 0 / 0
Регистрация: 14.07.2015
Сообщений: 16
14.07.2015, 18:19  [ТС]     Вывести те слова из текста на экран, которые отсортированы по количеству гласных букв #9
Цитата Сообщение от Raali Посмотреть сообщение
algorighm нужен для сортировки ( ф-я std::sort ), если без него, то придется сортировать вручную
Нам преподаватель показывал, если я не ошибаюсь, только пузырьковый метод. Вот можно им как то заменить это?
S_el
1908 / 1503 / 296
Регистрация: 15.12.2013
Сообщений: 5,921
14.07.2015, 18:22     Вывести те слова из текста на экран, которые отсортированы по количеству гласных букв #10
Цитата Сообщение от dfsdfgfsdg Посмотреть сообщение
Просто нам ещё этого не преподавали!
Ну и что?Так вы узнаете новую информацию.И вам полезно и преподу приятно будет.

Добавлено через 19 секунд
Цитата Сообщение от dfsdfgfsdg Посмотреть сообщение
Вот можно им как то заменить это?
можно.
dfsdfgfsdg
0 / 0 / 0
Регистрация: 14.07.2015
Сообщений: 16
14.07.2015, 18:26  [ТС]     Вывести те слова из текста на экран, которые отсортированы по количеству гласных букв #11
Цитата Сообщение от S_el Посмотреть сообщение
Вот можно им как то заменить это?
можно.
Я так думаю, заменить можно все, но я не знаю как! Вот если бы кто помог, было бы вообще супер.
Raali
14.07.2015, 18:28
  #12

Не по теме:

Цитата Сообщение от dfsdfgfsdg Посмотреть сообщение
Нам преподаватель показывал, если я не ошибаюсь, только пузырьковый метод.
Дело в том что нам он пузырьковый метод как раз не показывал) на практике для этого используют готовый sort

S_el
1908 / 1503 / 296
Регистрация: 15.12.2013
Сообщений: 5,921
14.07.2015, 18:35     Вывести те слова из текста на экран, которые отсортированы по количеству гласных букв #13
Цитата Сообщение от dfsdfgfsdg Посмотреть сообщение
Я так думаю, заменить можно все, но я не знаю как! Вот если бы кто помог, было бы вообще супер.
Так я вам помогаю.Предлагаю вам такой алгоритм действий:
1. Разобраться с приведенным выше кодом.
* прокомментировать,незнакомые места разобрать(использовать литературу,статьи,форум)
* задать конкретный вопрос,если что-то будет не понятно.
2. Переписать под требования преподавателя.
* выбрать замену для vector<> и sort().
* разобрать предполагаемую реализацию
* выполнить,если не получается,задать конкретный вопрос.
3. В результате получаете знания и начнете решать свои задачи самостоятельно.
dfsdfgfsdg
0 / 0 / 0
Регистрация: 14.07.2015
Сообщений: 16
14.07.2015, 18:38  [ТС]     Вывести те слова из текста на экран, которые отсортированы по количеству гласных букв #14
Цитата Сообщение от S_el Посмотреть сообщение
Так я вам помогаю.Предлагаю вам такой алгоритм действий:
1. Разобраться с приведенным выше кодом.
* прокомментировать,незнакомые места разобрать(использовать литературу,статьи,форум)
* задать конкретный вопрос,если что-то будет не понятно.
2. Переписать под требования преподавателя.
* выбрать замену для vector<> и sort().
* разобрать предполагаемую реализацию
* выполнить,если не получается,задать конкретный вопрос.
3. В результате получаете знания и начнете решать свои задачи самостоятельно.
Я конечно понимаю, что можно все это все самому разобрать и понять. Но дело в том, что времени практически нету. Надо завтра программу показывать, а чтобы самому это все понять и осмыслить, знаний, на сегодняшний день, не хватает.
Sn1p3rOk
 Аватар для Sn1p3rOk
281 / 168 / 66
Регистрация: 19.04.2014
Сообщений: 1,078
Завершенные тесты: 2
14.07.2015, 20:06     Вывести те слова из текста на экран, которые отсортированы по количеству гласных букв #15
dfsdfgfsdg, вот решение. Не самый короткий, но наверное самый примитивный вариант.
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
// Подсчет кол-ва слов в файле
int CountWords(ifstream &file)
{
    string str;
    int countWords = 0;
 
    file.open("test.txt", ios::in);
 
    while(!file.eof())
    {
        getline(file, str, ' ');
        countWords ++;
    }
 
    file.close();
 
    return countWords;
}
 
// Чтения слов из файла
void ReadFile(ifstream &file, char** words)
{
    file.open("test.txt", ios::in);
 
    int i = 0;
    char tempStr[10];
 
    while (!file.eof())
    {
        file >> tempStr;
 
        strcpy(words[i], tempStr);
 
        i ++;
    }
 
    file.close();
}
 
// Подсчет кол-ва гласных букв в каждом слове
void CountVowels(int countWords, int* countVowels, char** words)
{
    char vowels[20] = {'А', 'а', 'Я', 'я', 'О', 'о', 'Ё', 'ё', 'У', 'у', 'Ю', 'ю', 'Ы', 'ы', 'И', 'и', 'Э', 'э', 'Е', 'е' };
 
    for (int i = 0; i < countWords; i ++)
    {
        countVowels[i] = 0;
 
        for(int j = 0; j < 10; j ++)
        {
            for (int z = 0; z < 20; z ++)
            {
                if (words[i][j] == vowels[z])
                {
                    countVowels[i] ++;
                    break;
                }
            }
        }
    }
}
 
// Сортировка и вывод в консоль
void SortAndOutput(int countWords, int* countVowels, char** words)
{
    for (int i = 0; i < countWords; i ++)
    {
        for (int j = i + 1; j < countWords; j ++)
        {
            if (countVowels[i] > countVowels[j])
            {
                int temp = countVowels[i];
                countVowels[i] = countVowels[j];
                countVowels[j] = temp;
 
                char tempStr[10];
 
                strcpy(tempStr, words[i]);
                strcpy(words[i], words[j]);
                strcpy(words[j], tempStr);
            }
        }
 
        cout << "Гласных : " << countVowels[i] << " ~ " << words[i] << endl;
    }
}
 
int main()
{
    setlocale(LC_ALL, "russian");
 
    ifstream file;
    int countWords = CountWords(file);
 
    int* countVowels = new int[countWords];
 
    char** words = new char*[countWords];
    for (int i = 0; i < countWords; i ++)
    {
        words[i] = new char[10];
    }
 
    ReadFile(file, words);
 
    CountVowels(countWords, countVowels, words);
 
    SortAndOutput(countWords, countVowels, words);
 
    return 0;
}
Геомеханик
 Аватар для Геомеханик
517 / 324 / 253
Регистрация: 26.06.2015
Сообщений: 738
14.07.2015, 21:18     Вывести те слова из текста на экран, которые отсортированы по количеству гласных букв #16
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
#include <iostream>
#include <strstream>
#include <fstream>
#include <cctype>
#include <cstring>
#include <malloc.h>
#define  BLOCK   64
 
 
//Пузырьковая сортировка
template<typename T>
void bsort(T* f, T* l){
    bool lp = true;
    T*   e  = l - 1;
 
    for(; (f != l) && lp; ++f){
        lp = false;
        for(T* p = e; p > f; --p){
            if(*p < *(p - 1)){
                std::swap(*p, *(p - 1));
                lp = true;
            }
        }
    }
}
 
 
//структура содержит указатель на слово, длинну, кол-во гласных
struct info {
    const char*    p;
    unsigned short n, v;
 
    bool operator < (const info& inf) const {
        return (v < inf.v);
    }
 
    static bool _alloc(info** arr, size_t n, size_t& m){
        if(*arr == NULL){
            *arr = (info*)malloc(BLOCK * sizeof(info));
            if(*arr != NULL)
                m = BLOCK;
        } else if(n >= m){
            info* p = (info*)realloc(*arr, (m + BLOCK) * sizeof(info));
            if(p == NULL)
                return false;
            m    = m + BLOCK;
            *arr = p;
        }
        return (*arr != NULL);
    }
};
 
 
void output_ws(std::ostream& _out, std::istream& _in){
    char buf[256];
    std::string s;
 
    //читаем входной поток в строку
    while(! _in.eof() && ! _in.fail()){
        _in.read(buf, sizeof(buf)-1);
        if(_in.gcount() > 0)
            s.append(buf, buf + _in.gcount());
    }
 
    size_t cnt = 0, mem = 0;
    info*  arr = NULL;
 
    unsigned short v, n;
    const char* i, *p = s.c_str();
 
    while(*p){
        while(*p && ! std::isalpha(*p))
            ++p;
 
        i = p;
        n = v = 0;
        while(std::isalpha(*i)){
            if(std::strchr("aeiouyAEIOUY", *i) != NULL)
                ++v;
            ++i;
            ++n;
        }
 
        if(n > 0){
            if(info::_alloc(&arr, cnt, mem)){
                arr[cnt].p = p;
                arr[cnt].n = n;
                arr[cnt].v = v;
                ++cnt;
            }
        }
        p = i;
    }
 
    //сортируем
    bsort(arr, arr + cnt);
 
    //выводим
    const info* end = arr + cnt;
    for(const info* it = arr; it != end; ++it){
        _out.write(it->p, (int)it->n);
        _out << std::endl;
    }
    free(arr);
}
 
 
int main(void){
    char s[] = "information found\n no matching symbolic";
    std::istrstream sp(s);
    output_ws(std::cout, sp);
 
/*  вывести из файла
    std::ifstream fp("input.txt");
    output_ws(std::cout, fp);
    fp.close();
*/
    return 0;
}
Результат работы кода
dfsdfgfsdg
0 / 0 / 0
Регистрация: 14.07.2015
Сообщений: 16
14.07.2015, 21:18  [ТС]     Вывести те слова из текста на экран, которые отсортированы по количеству гласных букв #17
Sn1p3rOk, при компилировании вылазит окно с "Unhandled exception at 0x1027d340 (msvcr100d.dll) in 546456.exe: 0xC0000005: Access violation writing location 0xfdfdfdfd."
Sn1p3rOk
 Аватар для Sn1p3rOk
281 / 168 / 66
Регистрация: 19.04.2014
Сообщений: 1,078
Завершенные тесты: 2
14.07.2015, 21:31     Вывести те слова из текста на экран, которые отсортированы по количеству гласных букв #18
dfsdfgfsdg, Студия какая ?
dfsdfgfsdg
0 / 0 / 0
Регистрация: 14.07.2015
Сообщений: 16
14.07.2015, 21:44  [ТС]     Вывести те слова из текста на экран, которые отсортированы по количеству гласных букв #19
Sn1p3rOk, 2010 года
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2015, 22:15     Вывести те слова из текста на экран, которые отсортированы по количеству гласных букв
Еще ссылки по теме:

C++ Вывести слова, содержащие гласных букв больше, чем согласных
Найти и вывести на экран слова, начинающиеся с гласных букв C++
C++ Отсортировать слова по количеству гласных букв

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

Или воспользуйтесь поиском по форуму:
Sn1p3rOk
 Аватар для Sn1p3rOk
281 / 168 / 66
Регистрация: 19.04.2014
Сообщений: 1,078
Завершенные тесты: 2
14.07.2015, 22:15     Вывести те слова из текста на экран, которые отсортированы по количеству гласных букв #20
dfsdfgfsdg, вот подправил для вашей студии. Пробуйте.
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
// Подсчет кол-во слов в файле
int CountWords(ifstream &file)
{
    string str;
    int countWords = 0;
 
    file.open("test.txt", ios::in);
 
    while(!file.eof())
    {
        getline(file, str, ' ');
        countWords ++;
    }
 
    file.close();
 
    return countWords;
}
 
// Чтения слов из файла
void ReadFile(ifstream &file, string* words)
{
    file.open("test.txt", ios::in);
 
    string tempStr;
 
    for(int i = 0; !file.eof(); i ++)
    {
        file >> tempStr;
 
        words[i] = tempStr;
    }
 
    file.close();
}
 
// Подсчет кол-во гласных букв в каждом слове
void CountVowels(int countWords, int* countVowels, string* words)
{
    string vowels = "АаЯяОоЁёУуЮюЫыИиЭэЕе";
 
    for (int i = 0; i < countWords; i ++)
    {
        countVowels[i] = 0;
 
        for(int j = 0; j < words[i].size(); j ++)
        {
            for (int z = 0; z < vowels.size(); z ++)
            {
                if (words[i][j] == vowels[z])
                {
                    countVowels[i] ++;
                    break;
                }
            }
        }
    }
}
 
// Сортировка и вывод в консоль
void SortAndOutput(int countWords, int* countVowels, string* words)
{
    for (int i = 0; i < countWords; i ++)
    {
        for (int j = i + 1; j < countWords; j ++)
        {
            if (countVowels[i] > countVowels[j])
            {
                int temp = countVowels[i];
                countVowels[i] = countVowels[j];
                countVowels[j] = temp;
 
                string tempStr = words[i];
                words[i] = words[j];
                words[j] = tempStr;
            }
        }
 
        cout << "Гласных : " << countVowels[i] << " ~ " << words[i] << endl;
    }
}
 
int main()
{
    setlocale(LC_ALL, "russian");
 
    ifstream file;
 
    int countWords = CountWords(file);
 
    int* countVowels = new int[countWords];
    string* words = new string[countWords];
 
    ReadFile(file, words);
    CountVowels(countWords, countVowels, words);
    SortAndOutput(countWords, countVowels, words);
 
    return 0;
}
Yandex
Объявления
14.07.2015, 22:15     Вывести те слова из текста на экран, которые отсортированы по количеству гласных букв
Ответ Создать тему
Опции темы

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