Посчитать количество слов в файле c

Меня попросили разработать программу для подсчета нет. строк и слов в файле, это мое испытание, мой учитель сказал, что я не могу использовать >> оператор для подсчета слов и сравнения, но я не смог с этим справиться.

Решение

Что вы можете сделать, это добавить третий аргумент getline() , Это позволяет ему извлекать данные из потока, пока не попадет в символ. дела getline(cin, line, ‘ ‘) принимает все данные до следующего и помещает это в line , Ваш код может выглядеть так:

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

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

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

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

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

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

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 , ‘ — ‘ ) ;

Читайте также  Рейтинг игроков в вов

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 .

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

#include
#include
#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 %ld симв., %d сл.
" , s , strlen ( s ) , word ) ;
>
printf ( "%d стр.
" , line ) ;
fclose ( f ) ;
>

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

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

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 ( )

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

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

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

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

open "text.txt"
ln = 0
while not eof
ln = ln + 1
s$ = readline
i = 1
word = 0
flag = 0
while i if c$ <> " " and flag = 0 then
word = word + 1
flag = 1
else
if c$ = " " then flag = 0
endif
i = i + 1
endwhile

Читайте также  Почему не могу установить adobe flash player

print s$ + length(s$) + ", " + word
endwhile
close

Есть текстовый файл, в котором записано несколько строк. Слова разделены пробелами.Необходимо посчитать только слова одной строки (пользователь сам вводит номер строки). Хотел сделать проверку, чтобы счетчик считал за слово если в строке идет порядок — символ-пробел-символ. Подскажите, что не так?

2 ответа 2

Можно использовать разделить строку по пробелам и таким образом посчитать число слов:

Тут так же рассматриваем случай, когда стоят два пробела подряд. Тогда слово не будет добавлено. Аргументом функции будет считанная строка из файла. Если первый символ элемента буква, то будем считать этот элемент словом.

Постараемся это сделать проще, быстрее и без излишней памяти

Всё ещё ищете ответ? Посмотрите другие вопросы с метками c++ строки или задайте свой вопрос.

Похожие

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2019 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2019.12.20.35703

Ссылка на основную публикацию
Adblock
detector