С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
1 / 1 / 0
Регистрация: 11.12.2017
Сообщений: 44
1

Содержимое файла записать в queue и сосчитать количество гласных

11.02.2018, 18:11. Показов 1465. Ответов 26
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Мне нужно написать две функции:
1 функция) Нужно считать с файла и записать в queue 5 слов.
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
#include "stdafx.h"
#include <iostream>
#include <queue>
#include <condition_variable>
#include <fstream> 
#include <cstring>
#include <sstream>
#include <algorithm>
#include <functional>
#include <iterator>
#include<cstring>
 
 
std::queue<std::string> queue;
//1
void readAndWriteFile(const std::string& pathToFile)
{
    unsigned number = 5;
    std::ifstream stream(pathToFile);
    if (!stream)
    {
        std::cout << "Can not open file" << "\n";
    }
    else
    {
        for (int index = 0; index < number; ++index ) 
        {
            
            queue.push(stream);
        }
    }
}
//2
bool isVowel(char ch) 
{ 
    return std::strchr("aeiouAEIOU", ch) != NULL; 
}
void findVowels() 
{
    std::string::const_iterator p = std::partition(queue.front(), queue.back(), std::ptr_fun(isVowel));
 
    std::copy(queue.front(), queue.back(),
        std::ostream_iterator<char>(std::cout, " "));
 
}
 
    
int main()
{
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.02.2018, 18:11
Ответы с готовыми решениями:

Сосчитать количество символов из файла и записать результат в новый файл
задание сосчитать количество символов из файла и записать результат в новый файл Помогите...

Записать в файл g количество гласных букв в каждой строке файла f
Дан файл F. Написать в файл g, кол-во гласных букв в каждой строке файла f.

Записать в файл g количество гласных букв в каждой стоке файла f
дан файл f. Написать в файл g, кол-во гласных букв в каждой стоке файла f.

Сосчитать количество гласных букв в н-слове, взятом из списка слов
Сосчитать кол-во гласных букв в n-слове, взятом из списка слов. Размер списка 15 слов. Максимальная...

26
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
11.02.2018, 18:57 2
Цитата Сообщение от olena_nov Посмотреть сообщение
std::string::const_iterator p = std::partition(queue.front(), queue.back(), std::ptr_fun(isVowel));
http://en.cppreference.com/w/cpp/algorithm/count для каждого слова в queue надо вывести через std::cout
1
1 / 1 / 0
Регистрация: 11.12.2017
Сообщений: 44
11.02.2018, 19:19  [ТС] 3
outoftime, не совсем поняла о чем вы
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
11.02.2018, 19:32 4
olena_nov,
C++
1
for (auto str : queue) std::cout << std::count(str.begin(), str.end(), std::ptr_fun(isVowel)) ;
0
1 / 1 / 0
Регистрация: 11.12.2017
Сообщений: 44
12.02.2018, 11:59  [ТС] 5
outoftime,
Давайте будет все поступово делать. Так я вывожу всю чергу на екран(для себя). А мне нужно только 5. А как взять 5 в тексте слов?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void ProduceData()
{
    const std::string& pathToFile = "D:\\text.txt";
    unsigned number = 5;
    std::string s;
    std::ifstream stream(pathToFile);
    if (!stream)
    {
        std::cout << "Can not open file" << "\n";
    }
    while (std::getline(stream, s))
    {
            queue.push(s);
    }
    std::cout << "queue: " << queue.front() << queue.back();
}
0
184 / 192 / 48
Регистрация: 25.08.2011
Сообщений: 792
12.02.2018, 12:18 6
Цитата Сообщение от olena_nov Посмотреть сообщение
std::cout << "queue: " << queue.front() << queue.back();
так вы не распечатаете всю очередь а только первый и последний элемент. нужно знать количество елементов а потом просто взяли елемент распечатали вытолкнули затолкнули обратно
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
12.02.2018, 12:44 7
 Комментарий модератора 
не ругаемся

Цитата Сообщение от olena_nov Посмотреть сообщение
нужно посчитать сколько гласных в каждом слове.
В каждом слове из файла, вообще всех русских слов или слов из очереди?
0
184 / 192 / 48
Регистрация: 25.08.2011
Сообщений: 792
12.02.2018, 13:15 8
outoftime, не используй Украинский забанят. А она просит шаг за шагом что бы понять как оно работает. И кстате девочка талантливая раз не боиться использовать стл и итераторы. Большенство здешних не могут хело ворд написать норм
0
outoftime
12.02.2018, 13:41
  #9

Не по теме:

1Вирт1, а мне кажется она просто "ходит по шаманам" которые ей огрызки кода подсовывают, иначе она бы уже давно сама разобралась или задавала бы куда более конкретные вопросы.

А в целом да, я вот о std::ptr_fun от ее кода узнал, что поразительно для меня.

0
1 / 1 / 0
Регистрация: 11.12.2017
Сообщений: 44
12.02.2018, 13:53  [ТС] 10
1Вирт1,

Не по теме:

я именно это и имела введу что хочу все понять где я не так сделала, но увы тут большинство пишут что бы написать. Кажется конкретный вопрос задала. что не так у меня в коде. не написала только вопрос без кода. но увы и тут кому то что то не понравится , скинут сылку на документацию, потом рядок коду. а к чему этот код .... я то разобралася к чему. но я задала контретный вопрос потом который не относится к этому рядку. другая функция. Я это так вижу: спрашиваешь: мне нужно написать на бумаге текст черным цветом. И скидывешь что у тебя есть. И человек не пишет что у тебя не черный цвет а красный . а пишет почитай про чернила. И хочется спросить: то есть до чернила у меня все ок?(хоча я уже поняла что в первой функции у меня много ошибок). Но спасибо outoftime что подсказали как там можно сделать(хоча там кампилятор кричит на for (auto str : queue) )


хм.
C++
1
std::cout << "queue: " << queue.front() << queue.back();
я думала весь текст выводит. и на скрине оно мне все вывело
Миниатюры
Содержимое файла записать в queue и сосчитать количество гласных  
0
1 / 1 / 0
Регистрация: 11.12.2017
Сообщений: 44
12.02.2018, 13:57  [ТС] 11
outoftime,

Не по теме:

как я уже сказала. если я бы хотела что бы мне кто то написал код вместо меня я б вопрос
по другому ставила. если Вам не хочется мне помогать, не пишите сюда. И сегодня я конкретный вопрос задала - как только 5 записать а не все.



Добавлено через 2 минуты
outoftime,
В каждом слове из файла, вообще всех русских слов или слов из очереди?
- нет с очереди.
0
184 / 192 / 48
Регистрация: 25.08.2011
Сообщений: 792
12.02.2018, 14:12 12
 Комментарий модератора 
{deleted}
П.4.6 Правил.
Обсуждение вопросов - только в теме на форуме. Приглашения к обсуждению еще где-либо (в том числе и с помощью системы личных сообщений) запрещены

Добавлено через 2 минуты
outoftime, там целая пачка mem_fun, mem_fun_ref тоже полезные что то типа ptr_fun но со своими возможностями
0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
12.02.2018, 14:57 13
olena_nov, я тщеславный человек
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 <queue>
#include <fstream>
#include <algorithm>
 
void read_and_write_file(const ::std::string &pathToFile, ::std::queue<::std::string> &queue);
void find_vowels(::std::queue<::std::string> &queue);
 
int main()
{
    ::std::queue<::std::string> queue;
    ::read_and_write_file("1", queue);
    ::find_vowels(queue);
}
 
void read_and_write_file(const ::std::string &pathToFile, ::std::queue<::std::string> &queue)
{
    ::std::ifstream in(pathToFile);
    if (!in)
    {
        ::std::cout << "Can not open file" << ::std::endl;
        return;
    }
 
    const size_t number = 5;
    ::std::string value;
    for (size_t index = 0; index < number; ++index)
    {
        in >> value;
        queue.push(value);
    }
}
 
bool is_vowel(const char ch)
{
    switch (std::tolower(static_cast<unsigned char>(ch)))
    {
    case 'a':
    case 'e':
    case 'i':
    case 'o':
    case 'u':
        return true;
    default:
        return false;
    }
}
 
size_t count_vowels(const ::std::string &str)
{
    return std::count_if(str.begin(), str.end(), ::is_vowel);
}
 
void find_vowels(::std::queue<::std::string> &queue)
{
    while (!queue.empty())
    {
        ::std::cout << queue.front() << ": " << ::count_vowels(queue.front()) << ::std::endl;
        queue.pop();
    }
}
Добавлено через 7 минут
Цитата Сообщение от olena_nov Посмотреть сообщение
кампилятор кричит на for (auto str : queue)
И правильно делает. http://ru.cppreference.com/w/cpp/container/queue Самый плохой контейнер из всех для итерации по коллекции. У него нету методов .begin() & .end() которые должны возвращать итераторы.

Добавлено через 3 минуты
А еще у queue нету push_back или push_front но есть push из-за чего нельзя использовать back_inserter || front_inserter

http://ru.cppreference.com/w/c... k_inserter
http://ru.cppreference.com/w/c... t_inserter

Добавлено через 1 минуту

Не по теме:

Искренне негодую по этому поводу... Хотя, всегда можно использовать std::list вместо queue с такой же скоростью работы.



Добавлено через 5 минут

Не по теме:

olena_nov, и еще, чаще пользуйтесь переводчиком когда пишите на русском.

1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12832 / 7569 / 1764
Регистрация: 25.07.2009
Сообщений: 13,965
12.02.2018, 17:35 14
Цитата Сообщение от olena_nov Посмотреть сообщение
C++
1
2
3
4
int main()
{
    return 0;
}
Чувствую - подвох какой-то...

И вообще всё как-то сложно и запутанно
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
#include <iostream>
#include <fstream>
#include <algorithm>
#include <queue>
#include <cstring>
 
const char * FILE_NAME = "file.txt";
const int WORDS_TO_TEST = 5;
 
int main() {
    int i, vowels = 0;
    std::queue<std::string> words;
    std::string wrd;
    
    std::ifstream ifs(FILE_NAME);
    if ( ! ifs.is_open() ) {
        std::cerr << "Can't open file " << FILE_NAME << " for input!" << std::endl;
        return 1;
    }
    
    for ( i = 0; i < WORDS_TO_TEST; ++i ) {
        if ( ! ( ifs >> wrd ) ) {
            std::cerr << "Can't read needed (" << WORDS_TO_TEST << ") words." << std::cerr;
            ifs.close();
            return 1;
        }
        
        words.push(wrd);
    }
    
    ifs.close();
    
    std::cout << "Word\tVowels" << std::endl;
    while ( ! words.empty() ) {
        wrd = words.front();
        int vow = std::count_if(wrd.begin(), wrd.end(), [](const char& c) { return ( strchr("AEIOUaeiou", c) != NULL ); });
        vowels += vow;
        std::cout << wrd << "\t" << vow << std::endl;
        
        words.pop();
    }
    std::cout << "-----------------------------------------\nTotal: " << vowels << " vowels." << std::endl;
    
    return 0;
}
0
Форумчанин
Эксперт CЭксперт С++
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
12.02.2018, 17:40 15
Цитата Сообщение от outoftime Посмотреть сообщение
я вот о std::ptr_fun от ее кода узнал
Можно смело забыть т.к. в С++11 это deprecated, а в текущей версии стандарта уже выпилено.
0
184 / 192 / 48
Регистрация: 25.08.2011
Сообщений: 792
12.02.2018, 17:43 16
MrGluck,

Не по теме:

а как же те кто мучались?:cry: в сердцах новых поколений должна жить память

0
║XLR8║
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
12.02.2018, 17:51 17
MrGluck, пользоваться std::function ?
0
184 / 192 / 48
Регистрация: 25.08.2011
Сообщений: 792
12.02.2018, 17:53 18
outoftime, лямбдочки роднинькие - лямбды -шлямбды
0
Форумчанин
Эксперт CЭксперт С++
8216 / 5046 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
12.02.2018, 18:50 19
Цитата Сообщение от outoftime Посмотреть сообщение
std::function
Можно его, а можно сразу лямбда-функции.
0
1 / 1 / 0
Регистрация: 11.12.2017
Сообщений: 44
14.02.2018, 12:13  [ТС] 20
MrGluck, easybudda, 1Вирт1, у меня к Вам вопрос: Мне нужно еще переверять а не конец ли у меня черги когда я записываю 5 слов. Например у меня есть только 3 слова а не 5 и мне их нужно записать. Я так думала сделать:
C++
1
2
for (std::uint8_t count = 0; (count < 5) || (count < queue.back()); ++count)
            queue.push(word);
но как я понимаю так делать нельзя.
0
14.02.2018, 12:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.02.2018, 12:13
Помогаю со студенческими работами здесь

Записать в текстовый файл содержимое Edit, и прочитать содержимое файла в Memo
Создать приложение которое создает текстовый файл текстовый файл text.txt записывает в него текст...

Сосчитать количество нулевых элементов массива и записать их индексы в массиве IND
Задание 4. Организация циклов Составить схему алгоритма и программу циклического...

В строке посчитать количество гласных и согласных и записать из количество в конце строки
В строке посчитать количество гласных и согласных и записать из количество в конце строки....

Подсчитать количество гласных букв, результат записать в файл g
Создать и заполнить текс. файл f. Подсчитать кол.во гласных букв, рехультат записать в файл g


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru