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

Задача

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

Пояснение к задаче и алгоритм решения

Подсчет строк:
Ввести счетчик, присвоить ему 0.
Пока не будет достигнут конец файла, считывать очередную строку файла и увеличивать счетчик на 1.

Подсчет символов в строке:
Измерять длину очередной строки с помощью встроенный в язык программирования функции.

Подсчет слов в строке:

  1. Ввести счетчик слов и присвоить ему 0.
  2. Ввести флаговую переменную и присвоить ей 0 (сигнал нахождения вне слова).
  3. Пока не будет достигнут конец строки:
    1. Если очередной символ не пробел и флаг указывает на нахождение вне слова, то увеличить счетчик слов и присвоить флаговой переменной 1 (сигнал нахождения внутри слова).
    2. Если же очередной символ пробел, то присвоить флагу 0.

Исходный код на языке программирования Pascal

var
    f: text;
    s: string;
    line, chr, wrd: word;
    i: byte;
    flag: boolean;
begin
    assign(f,'text.txt');
    reset(f);
    line := 0;
    while not EOF(f) do begin
        readln(f,s);
        write(s, ' - ');
 
        line := line + 1;
 
        chr := length(s);
        write(chr, ' симв., ');
 
        wrd := 0;
        flag := false;
        for i:=1 to chr do
            if (s[i] <> ' ') and (flag = false) then begin
                wrd := wrd + 1;
                flag := true;
            end
            else
                if s[i] = ' ' then flag := false;
        writeln(wrd, ' сл.');
    end;
    close(f);
    writeln(line,' стр.');
end.

Пример(ы) выполнения программы на языке Pascal

Hello world! - 12 симв., 2 сл.
Привет мир! - 20 симв., 2 сл.
One, two, three - 15 симв., 3 сл.
Один, два, три - 24 симв., 3 сл.
4 стр.

Особенности решения на языке программирования Pascal

Файл выполнен в среде GNU/Linux, компилятор FreePascal. Русские символы считаются за 2 символа. Например, в данном примере во второй строке 9 кириллических символа, пробел и восклицательный знак: 18 + 2 = 20 символов.

Исходный код на языке программирования C

#include <stdio.h>
#include <string.h>
#define N 255
main() {
    FILE *f;
    char s[N];
    unsigned short line, word, flag, i;
    line = 0;
    f = fopen("text.txt","r");
    while (fgets(s, N, f) != NULL) {
        line += 1;
 
        word = 0;
        flag = 0;
        for (i=0; i < strlen(s); i++)
            if (s[i] != ' ' && flag == 0) {
                word += 1;
                flag = 1;
            } else
                if (s[i] == ' ') flag = 0;
 
        printf("%s\t%ld симв., %d сл.\n",s,strlen(s),word);
    }
    printf("%d стр.\n", line);
    fclose(f);
}

Пример(ы) выполнения программы на языке C

Hello world!
        13 симв., 2 сл.
Привет мир!
        21 симв., 2 сл.
One, two, three
        16 симв., 3 сл.
Один, два, три
        25 симв., 3 сл.
4 стр.

Особенности решения на языке программирования C

Тот же "эффект", что и в Паскале: кириллический символ считается за 2.

Функция fgets() считывает строку вместе с символом перехода на новую строку. Аргумент N не позволяет считать больше указанного количества символов, но длина строки определяется по количеству считанных (т.е. фактической длиной строки).

Исходный код на языке программирования Python

f = open('text.txt')
line = 0
for i in f:
    line += 1
 
    flag = 0
    word = 0
    for j in i:
        if j != ' ' and flag == 0:
            word += 1
            flag = 1
        elif j == ' ':
            flag = 0
 
    print(i,len(i),'симв.',word,'сл.')
 
print(line,'стр.')
f.close()

Пример(ы) выполнения программы на языке Python

Hello world!
 13 симв. 2 сл.
Привет мир!
 12 симв. 2 сл.
One, two, three
 16 симв. 3 сл.
Один, два, три
 15 симв. 3 сл.
4 стр.

Особенности решения на языке программирования Python

Символ перехода на новую строку учитывается.

Исходный код на языке программирования КуМир

использовать Файлы П
алг
нач
  цел f, line, word, char, in, i
  лит s
  line := 0
  word := 0
  char := 0
  f := открыть на чтение ("текст.txt")
  нц пока не конец файла (f)
    Фввод f, s
    line := line + 1
    вывод s, нс
    char := char + длин(s)
    in := 0
    нц для i от 1 до длин(s)
      если s[i] <> " " и in = 0 то
        word := word + 1
        in := 1
       иначе
        если s[i] = " " то in := 0 все
      все
    кц
  кц
  закрыть(f)
  вывод нс, "строк - ", line, нс
  вывод "слов - ", word, нс
  вывод "символов - ", char
кон

Пример(ы) выполнения программы на языке КуМир

Привет, Мир!
Hello World!
5, 4 ...

строк - 3
слов - 7
символов - 32

Особенности решения задачи в среде КуМир

Здесь считается общее количество слов и символов.

Исходный код на языке программирования Basic

open "text.txt"
ln = 0
while not eof
        ln = ln + 1
        s$ = readline
        i = 1
        word = 0
        flag = 0
        while i <= length(s$)
                c$ = mid(s$,i,1)
                if c$ <> " " and flag = 0 then
                        word = word + 1
                        flag = 1
                else
                        if c$ = " " then flag = 0
                endif
                i = i + 1
        endwhile
 
        print s$ + length(s$) + ", " + word
endwhile
close
 
print "Строк: " + ln

Пример(ы) выполнения программы на языке Basic

Hello world!
13, 2
Привет мир!
12, 2
One, two, three
16, 3
Один, два, три
15, 3
Строк: 4

Особенности решения на языке программирования Basic

Переход на новую строку учитывается как символ.

Тема

Файлы

Уровень сложности

Средний

Дата публикации