-1 / 1 / 1
Регистрация: 14.01.2017
Сообщений: 322
1

В текстовом файле подсчитать количество символов и строк

07.12.2017, 14:35. Показов 27256. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ребята! Помогите разобраться с файлами нужно - в текстовом файле. Подсчитать количество символов и строк в нём.
Объясните как реализовать.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.12.2017, 14:35
Ответы с готовыми решениями:

Подсчитать количество строк в текстовом файле
Нужно написать программу : Подсчитать количество строк в текстовом файле. Под строкой понимать...

Файл: В текстовом файле подсчитать количество непустых строк.
В текстовом файле подсчитать количество непустых строк.

В текстовом файле подсчитать количество строк, которые оканчиваются буквой «в»
В текстовом файле подсчитать количество строк, которые оканчиваются буквой «в». Вообще не умею...

Файлы: в текстовом файле подсчитать количество строк, которые начинаются с буквы
В текстовом файле подсчитать количество строк, которые начинаются с буквы «ф».

12
🅘 ❤ 🅛🅘🅝🅤🅧
17 / 46 / 13
Регистрация: 19.11.2016
Сообщений: 95
07.12.2017, 14:59 2
1) Для чтения используйте библиотеку fstream.
2) Для подсчета символов организуйте цикл, который будет доставать из файла по одному символу.
3) Для подсчета количества строк необходимо найти все символы "\n" и добавить 1.
Документация по fstream тут. Если возникнут какие-либо проблемы - милости прошу.
1
-1 / 1 / 1
Регистрация: 14.01.2017
Сообщений: 322
07.12.2017, 15:05  [ТС] 3
EnotProgrammist, спасибо но как организовать цикл который будет доставать из файла по одному символу непонятно и понятно что\n это конец строки, но снова как реализовать с файлом?
0
4018 / 2564 / 430
Регистрация: 09.09.2017
Сообщений: 11,414
07.12.2017, 15:15 4
Вот тут уже привели почти готовое решение.
0
838 / 641 / 940
Регистрация: 26.06.2015
Сообщений: 1,409
07.12.2017, 15:21 5
Лучший ответ Сообщение было отмечено vfhbf как решение

Решение

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
#include <iostream>
#include <fstream>
#include <iterator>
 
//для windows не подсчитывается символ '\r', только '\n'
bool load_info(const char* filename, size_t& lines, size_t& cnt){
    std::ifstream fp(filename);
    if(! fp.is_open())
        return false;
 
    std::istreambuf_iterator<char> i(fp), e;
    size_t n = 0, m = 0;
    for(; i != e; ++i, ++m){
        if(*i == '\n')
            ++n;
    }
    fp.close();
 
    lines = (m > 0) ? n + 1 : n;
    cnt   = m;
    return true;
}
 
int main(void){
    char fn[] = "file.txt";
 
    size_t lines, cnt;
    if(load_info(fn, lines, cnt)){
        std::cout << "lines: " << lines << std::endl
                  << "count: " << cnt   << std::endl;
    }
    std::cin.get();
    return 0;
}
0
🅘 ❤ 🅛🅘🅝🅤🅧
17 / 46 / 13
Регистрация: 19.11.2016
Сообщений: 95
07.12.2017, 15:37 6
vfhbf, в общем-то все просто. Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <fstream>
#include <string.h>
 
using namespace std;
 
int main()
{
    ifstream file("1.txt");
    int lines = 0, symbols = 0;
    string str;                            
    while(getline(file,str))
    {
        lines ++;
        symbols += str.size ();
    }
    cout << "Lines: " << lines << "\nSymbols: " << symbols;
}
0
-1 / 1 / 1
Регистрация: 14.01.2017
Сообщений: 322
07.12.2017, 16:35  [ТС] 7
Геомеханик, void main()
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
    sl;
    srand(time(0));
    char massive[] = "F:/докум.txt";  
    FILE *F_tel;
    int f = 0;
    if ((F_tel = fopen(massive, "r")) == NULL)
    {
        fprintf(stderr, "\"%s\" : невозможно открыть\n", massive);
 
    }
    else
    while (F_tel > 0){
        if (*massive == '\n')
            f++;
    }
 
    cout << f<< endl;
    sp;
}
можете сказать что не так
просто это для меня не знакомо вообще std::istreambuf_iterator<char> i(fp), e;

Добавлено через 25 минут
EnotProgrammist, чем можно заменить getline(file,str) и str.size ();?
0
🅘 ❤ 🅛🅘🅝🅤🅧
17 / 46 / 13
Регистрация: 19.11.2016
Сообщений: 95
07.12.2017, 16:50 8
Цитата Сообщение от vfhbf Посмотреть сообщение
EnotProgrammist, чем можно заменить getline(file,str) и str.size ();?
А чем Вас это не устраивает? Это стандартные функции, которые должен знать каждый.

Добавлено через 9 минут
Цитата Сообщение от vfhbf Посмотреть сообщение
str.size ();
sizeof(str);
0
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
07.12.2017, 21:19 9
vfhbf, здравствуйте! Вот пара моих вариантов решения. Второй отличается от приведенных выше тем, что используется посимвольное считывание:

Вариант 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
#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    ifstream fin("input.txt");
    ofstream fout("output.txt");
    string str;
    int x, y;
    x = y = 0;
    while (getline(fin, str))
    {
        for (int i = 0; i < str.size(); i++)
        {
            if (str[i] != ' ')
                x++;
        }
        y++;
    }
    cout << "The number of symbols: " << x << "\n";
    cout << "The number of strings: " << y << "\n";
    fin.close();
    fout.close();
    system("pause");
    return 0;
}
Вариант 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
#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    ifstream fin("input.txt");
    ofstream fout("output.txt");
    char ch;
    int x, y;
    x = y = 0;
    while (fin.get(ch))
    {
        if (!(isblank(ch)))
            x++;
        if (ch == '\n')
            y++;
    }
    cout << "The number of symbols: " << x - y << "\n";
    cout << "The number of strings: " << ++y << "\n";
    fin.close();
    fout.close();
    system("pause");
    return 0;
}
1
-1 / 1 / 1
Регистрация: 14.01.2017
Сообщений: 322
08.12.2017, 13:54  [ТС] 10
Fixer_84, Здравствуйте! спасибо, мне можно использовать только вот подобные функции которые в библиотеке iostream
у меня получилось вывести ко-во строк а с символами непруха(
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void main()
{
    sl;
    srand(time(0));
    char  b[100] = {},*m=0;
        int l=0,a=0;
        
    if ((F = fopen("F:/докум.txt", "rt")) == NULL)
    {
        puts("Открыть файл не удалось\n");
        exit(1);
    }
    for (int i = 0;!feof(F);i++)
    {
    
        m=fgets(b, 100, F);
        a++;
    }
    cout << a ;
    sp;
}
не подскажите что не так?
0
4018 / 2564 / 430
Регистрация: 09.09.2017
Сообщений: 11,414
08.12.2017, 14:42 11
Цитата Сообщение от vfhbf Посмотреть сообщение
в библиотеке iostream
F = fopen(
m=fgets(b, 100, F);
Только это не iostream а stdio (библиотека из Си а не С++)
100 символов на строку это мало. Даже в легендарные DOS'овые и ранне-юниксовые времена стандартом считалось 80 символов на строку, сейчас и этого ограничения нет. Возьмите хотя бы 1024, и то не факт что хватит.
Для подсчета символов достаточно делать
C
1
ch_num += strlen(b);
0
-1 / 1 / 1
Регистрация: 14.01.2017
Сообщений: 322
08.12.2017, 15:13  [ТС] 12
COKPOWEHEU,
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
[CPP]сhar massive[] = "F:/докум.txt"; //Имя файла справочника 
FILE *F,*m; 
void main()
{
    sl;
    srand(time(0));
    
    char  b[100] = {},*m=0,*j;
        int l=0,a=0,i=0;
        j = b;
    if ((F = fopen("F:/докум.txt", "rt")) == NULL)
    {
        puts("Открыть файл не удалось\n");
        exit(1);
    }
    
    getc(F);//цикл для чтения значений из файла; выполнение цикла прервется,
        //когда достигнем конца файла, в этом случае F.eof() вернет истину.
    while (!feof(F))
    {
        
        l += strlen(b);
        m=fgets(b, 100, F);
        a++;
    }
    
    cout << a<<l;
    
    sp;
}
[/CPP]
Спасибо, простите что выношу мозг но строк a выходит правильно но слов не совсем правильно
0
4018 / 2564 / 430
Регистрация: 09.09.2017
Сообщений: 11,414
08.12.2017, 17:01 13
Цитата Сообщение от vfhbf Посмотреть сообщение
но слов не совсем правильно
А где у вас в коде подсчет слов?
0
08.12.2017, 17:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.12.2017, 17:01
Помогаю со студенческими работами здесь

В текстовом файле подсчитать количество строк которые начинаются и оканчиваются одной и той же буквой
В текстовом файле подсчитать количество строк которые начинаются и оканчиваются одной и той же...

Подсчитать количество символов и строк в текстовом файле
Даны текстовый файл. Вывести количество содержащихся в нем символов и строк (маркеры концов строк...

В текстовом файле подсчитать количество строк длиннее 255 символов
Напишите программу , которая в текстовом файле подсчитывает количество строк длиннее 255 символов....

Подсчитать в текстовом файле количество строк, состоящих из одинаковых символов
Подсчитать в текстовом файле количество строк, состоящих из одинаковых символов.


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

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