Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
 Аватар для Anonymous4722
5 / 3 / 2
Регистрация: 29.11.2012
Сообщений: 545

Файлы. сделал только одну функцию, остальные не могу сделать

05.05.2019, 01:55. Показов 3031. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сделал, только одну функцию это подсчет символов и вывод статистики в файл2, но остальные функции вместе с этой сделать не могу. Выводит либо черти что, либо не записывает результат во 2-й файл. Как сделать все вместе эти функции и чтобы они записывались правильно во 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
/*Дан текстовый файл. Необходимо создать новый файл и записать в него следующую статистику
по исходному файлу:
Количество символов
Количество строк
Количество гласных букв
Количество согласных букв
Количество цифр.*/
 
#include <iostream>
#include <string>
#include <fstream>
#pragma warning(disable: 4996)
using namespace std;
 
int main()
{
    setlocale(0, "");
 
    char a[10000];
    int count = 0;
 
    ifstream f("C:\\f1\\file1.txt");
    ofstream f1("C:\\f1\\file2.txt");
    
    if (!f)
    {
        cout << "файл не открывается\n";
    }
    else
    {
        cout << "открыть файл\n";
        while (!f.eof())
        {
            char ch;
            f >> ch;
            count++;
        };
        f >> count;
        f1 << count;
        cout << count;
    }
    
    
    system("pause");
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.05.2019, 01:55
Ответы с готовыми решениями:

Факториал. Использовать только одну функцию main и только один цикл
задача вообщем простая, но условия осложняют: \sum_{i=0}^{n-1} {x}_{i}/i! использовать только одну функцию main и только один...

Как сделать чтобы Button сделал работу только один раз?
Люди добрые помогите нуба) Как делать чтоб если нажал в Button в textbox.Text появился допустим &quot;+&quot; но если ещё раз нажму на...

Оставить только выбранные checkbox-ы (остальные удалить или сделать невидимыми)
Если я создаю &quot;список&quot; checkbox-ов с помощью Scene Builder Можно ли оставить только выбранные checkbox остальные удалить или сделать...

11
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
05.05.2019, 03:20
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
#include <fstream>
#include <cctype>
 
 
bool isVowel(char ch) {
    switch (ch)
    {
    case 'a':
    case 'e':
    case 'i':
    case 'o':
    case 'u':
        return true;
    }
    return false;
}
 
 
int main()
{
    char ch;
    size_t symbols = 0;
    size_t rows = 0;
    size_t vowels = 0;
    size_t consonants = 0;
    size_t digits = 0;
 
    std::ifstream is("input.txt", std::ios::in);
 
    while (is >> std::noskipws >> ch) {
 
        if (isVowel(std::tolower(ch))) {
            ++vowels;
        }
        else if (std::isalpha(ch)) {
            ++consonants;
        }
        else if (std::isdigit(ch)) {
            ++digits;
        }
        else if (ch == '\n') {
            ++rows;
        }
        else {
            ++symbols;
        }
        
    }
 
    std::ofstream os("output.txt", std::ios::out);
 
    os << symbols + rows + digits + consonants + vowels << " "
        << rows << " " << vowels << " " << consonants << " " << digits;
 
 
    //system("pause");
    return 0;
}
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
05.05.2019, 03:53
Anonymous4722,
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
/*Дан текстовый файл. Необходимо создать новый файл и записать в него следующую статистику
по исходному файлу:
Количество символов
Количество строк
Количество гласных букв
Количество согласных букв
Количество цифр.*/
 
#include <iostream>
#include <fstream>
#include <string>
#include <cctype>
 
struct file_stat
{
    size_t
        char_cnt{},
        line_cnt{},
        vowl_cnt{},
        cons_cnt{},
        digs_cnt{};
};
 
void fill_stat(const std::string& str, file_stat& stat)
{
    static const std::string vowel{ "aeiou" };
    if (!str.empty()) ++stat.line_cnt;
    else return;
    for (auto ch : str)
    {
        ++stat.char_cnt;
        if (std::isdigit(ch)) ++stat.digs_cnt;
        else if (std::isalpha(ch))
            if (vowel.find(static_cast<char>(std::tolower(ch))) == std::string::npos) ++stat.cons_cnt;
            else ++stat.vowl_cnt;
        else if (ch == '\n') ++stat.line_cnt;
    }
}
int main()
{
    std::ifstream ifs{ "text.txt" };
 
    std::string text_file{ std::istreambuf_iterator<char>{ifs}, {} };
    file_stat stat;
    fill_stat(text_file, stat);
 
    std::ofstream ofs{ "out.txt" };
    ofs << stat.char_cnt << std::endl
        << stat.line_cnt << std::endl
        << stat.vowl_cnt << std::endl
        << stat.cons_cnt << std::endl
        << stat.digs_cnt << std::endl;
}
1
260 / 165 / 54
Регистрация: 03.05.2019
Сообщений: 339
05.05.2019, 11:56
Ответы сверху довольно неплохие.
Можно ёще сделать построчное чтение и отталкиваться от этого:
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 <iostream>
#include <fstream>
#include <string>
#include <Windows.h> // - SetConsoleCP()
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    setlocale(LC_ALL, "");
 
    unsigned int symbols = 0, lines = 0, vowels = 0, consonants = 0, digits = 0;
    std::ifstream input("input.txt");
    std::string eng_vowels = "aeiouy"; // - английские гласные
    std::string rus_vowels = "аоиеёэыуюя"; // - российские гласные
 
    std::string line; // - хранилище для каждой строки
    while (std::getline(input, line)) // - построчное чтение
    {
        lines++; // - увеличение счётчика строк
        symbols += line.length(); // - к количеству символов добавляється длина текущей строки
 
        for (unsigned int c = 0; c < line.length(); c++) // - цикл по всем символам строки [можно использовать итераторы]
        {
            if (!isalnum((unsigned char)line[c])) // - если не цифра и не буква
            {
                continue;
            }
            else if (isdigit((unsigned char)line[c]))
            {
                digits++;
            }
            else if (eng_vowels.find(line[c]) != -1 || rus_vowels.find(line[c]) != -1) // - если в списке гласных английского алфавита или российского найден такой символ
            {
                vowels++;
            }
            else
            {
                consonants++;
            }
        }
    }
    input.close();
 
    std::ofstream output("output.txt");
    output << "Всего строк в тексте: " << lines << "\nСимволов: " << symbols << "\nЦифр: " << digits
        << "\nГласных букв: " << vowels << "\nСогласных букв: " << consonants; // - запись в файл, каждое новое значение с новой строки
 
    output.close();
    return 0;
}
1
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
05.05.2019, 12:26
Лучший ответ Сообщение было отмечено Anonymous4722 как решение

Решение

Выяснилось что я ошибся с подсчётом строк, а также что '\n' пишется 2-мя символами.
То-есть по факту в файле символов больше на 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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
#include <fstream>
#include <cctype>
 
 
bool isVowel(char ch) {
    switch (ch)
    {
    case 'a':
    case 'e':
    case 'i':
    case 'o':
    case 'u':
        return true;
    }
    return false;
}
 
 
int main()
{
    {
        std::ofstream ss("input.txt", std::ios::out);
        ss << "1234567890\n+ab";    //14 total, but \n == 0D 0A
        ss.close();
    }
    
    char ch;
    size_t symbols = 0;
    size_t rows = 0;
    size_t vowels = 0;
    size_t consonants = 0;
    size_t digits = 0;
 
    std::ifstream is("input.txt", std::ios::in);
    if (!is.is_open()) {
        std::cout << "Read error." << "\n";
        return 1;
    }
 
    while (is >> std::noskipws >> ch) {
 
        if (isVowel(std::tolower(ch))) {
            ++vowels;
        }
        else if (std::isalpha(ch)) {
            ++consonants;
        }
        else if (std::isdigit(ch)) {
            ++digits;
        }
        else if (ch == '\n') {
            ++rows;
        }
        else {
            ++symbols;
        }
    }
 
    if (symbols) {
        ++rows;
    }
 
    std::ofstream os("output.txt", std::ios::out);
    if (!os.is_open()) {
        std::cout << "Write error." << "\n";
        return 1;
    }
 
    os << symbols + rows + digits + consonants + vowels << " "
        << rows << " " << vowels << " " << consonants << " " << digits;
 
 
    //system("pause");
    return 0;
}
Миниатюры
Файлы. сделал только одну функцию, остальные не могу сделать   Файлы. сделал только одну функцию, остальные не могу сделать  
1
 Аватар для Anonymous4722
5 / 3 / 2
Регистрация: 29.11.2012
Сообщений: 545
05.05.2019, 13:02  [ТС]
Цитата Сообщение от nalbe666 Посмотреть сообщение
Выяснилось что я ошибся с подсчётом строк, а также что '\n' пишется 2-мя символами.
То-есть по факту в файле символов больше на 1 с каждой строки.
Почему у меня не все получается?
Например у меня получилось сделать только одну функцию (это мой код выше) и там все в файл записывается. Я догадался, как нужно из одного файла записывать статистику в другой
C++
1
2
f >> count;
        f1 << count;
А вот для остальных сделать не мог.
0
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
05.05.2019, 13:12
Можете расписать, что делает каждая строка в Вашем коде? Продробно, пожалуйста.
0
 Аватар для Anonymous4722
5 / 3 / 2
Регистрация: 29.11.2012
Сообщений: 545
05.05.2019, 15:34  [ТС]
Цитата Сообщение от nalbe666 Посмотреть сообщение
Можете расписать, что делает каждая строка в Вашем коде
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
/*Дан текстовый файл. Необходимо создать новый файл и записать в него следующую статистику
по исходному файлу:
Количество символов
Количество строк
Количество гласных букв
Количество согласных букв
Количество цифр.*/
 
#include <iostream>
#include <string>
#include <fstream>
#pragma warning(disable: 4996) // это нужно для того чтобы избежать ошибки
using namespace std;
 
int main()
{
    setlocale(0, ""); // подключаю русский язык
 
    char a[10000]; // массив в котором 1000 символов
    int count = 0; // тут хранятся результаты программы
 
    ifstream f("C:\\f1\\file1.txt"); // эта строчка читает этот файл
    ofstream f1("C:\\f1\\file2.txt"); // эта строка записывает в файл
 
    if (!f) // эта строчка нужна для того чтобы выводить предупреждение, если пользователь ошибся с файлом и поместил его не туда. 
        
    {
        cout << "файл не открывается\n"; // если это так, то выводится сообщение об ошибки.
    }
    else // а иначе я открываю файл
    {
        cout << "открыть файл\n"; // вывожу сообщение, что файл открыть 
        while (!f.eof()) // в f - это просто, как поток. eof выдает истину, если файл пуст, но в данном случае это лож, т к файл не пуст. 
        {
            char ch; // переменная для того чтобы записать в нее результат
            f >> ch; // вывод рузультата
            count++; // получение рузльтатов
        };
        f >> count; // вывод из файла file1
        f1 << count; // запись в файл fiele2 результов 
        cout << count; // вывод на экран результата
    }
 
 
    system("pause");
    return 0;
}
0
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
05.05.2019, 17:12
19. Зачем эта переменная и где она ещё используется в дальнейшем? Вы пока писали комментарии, этого не заметили?
22,23. Касаемо комментария: не читают и записывают, а связывают файлы с потоками.
25. Касаемо комментария: это проверка failbit и badbit, а не просто тест на открытие.
32. Файл уже "открыт".
33. Нельзя так проверять, прочитался ли файл до конца. Вообще eof станет true только при попытке прочитать за концом файла. Есть шанс, что в таком цикле последняя строка прочитается дважды.
39. Зачем это действие? Какой ожидается результат? Вы же только-что перелопатили этот файл.

Так же, посмотрев на решения других, можно было задаться вопросом, типа что такое std::noskipws.
Но самое забавное, что все ответы можно найти в одном месте, например http://www.cplusplus.com/refer... /ifstream/ тут.
0
 Аватар для Anonymous4722
5 / 3 / 2
Регистрация: 29.11.2012
Сообщений: 545
05.05.2019, 17:17  [ТС]
Цитата Сообщение от nalbe666 Посмотреть сообщение
39. Зачем это действие? Какой ожидается результат? Вы же только-что перелопатили этот файл.
У меня в задании написано, что результаты должны записываться во 2й файл. Вот такой мне результат нужен был.

Добавлено через 49 секунд
Цитата Сообщение от nalbe666 Посмотреть сообщение
Так же, посмотрев на решения других, можно было задаться вопросом, типа что такое std::noskipws.
Но самое забавное, что все ответы можно найти в одном месте, например http://www.cplusplus.com/refer... /ifstream/ тут.
Я недавно изучаю Си++ и по этому много чего из функций не знаю.
0
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
05.05.2019, 17:21
Anonymous4722, Будьте повнимательней. Двумя строчками выше такой же синтаксис.
Цитата Сообщение от Anonymous4722 Посмотреть сообщение
Я недавно изучаю Си++ и по этому много чего из функций не знаю.
Напоминает инструкцию, как делать корабли в бутылках. Запихиваете в бутылку силикат, всякого говна и трясёте. Иногда получаютя корабли.
0
 Аватар для Anonymous4722
5 / 3 / 2
Регистрация: 29.11.2012
Сообщений: 545
05.05.2019, 17:25  [ТС]
Цитата Сообщение от nalbe666 Посмотреть сообщение
Напоминает инструкцию, как делать корабли в бутылках. Запихиваете в бутылку силикат, всякого говна и трясёте. Иногда получаютя корабли.
Не удачный пример
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.05.2019, 17:25
Помогаю со студенческими работами здесь

Как сделать вывод в строчку только 3 статьи, а остальные уже на другой php?
при помощи цикла выводим 3 статьи в ряд , а потом делаем 3 статьи на след ряду и так далее...как этот переход осуществить ? думаю что при...

Сделал из компьютера так называемый VDS-сервер на ubuntu, но зайти могу на него зайти только я
Добрый день. Сделал из своего ненужного компьютера так называемый VDS-сервер на ubuntu, установил на него сайт, все хорошо... У меня...

Описать функцию, оставляющую в массивах только точки, которые принадлежат полосе, заданной системой неравенств: y>= -1 и y<= +1, а остальные удалит
Помогите, кто может! Задача: Даны координаты n точек на координатной плоскости массивами координат. Описать функции ввода и вывода...

на диске С осталось 3 гига, всего 32Гб, занято 29Г, я могу найти только 9Г куда делись остальные 20Г?
У меня на диске С осталось 3 гига, всего 32Гб, занято 29Г, я могу найти только 9Г куда делись остальные 20Г не знаю, не вкурсе?

Двумерный массив сделал 1 и 2 задания из 5 остальные не получаются
1.(Сделал) Дан двумерный массив. Определить количество максимальных элементов в массиве. 2.(Сделал) Сформировать одномерный массив В,...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru