Как найти количество символов в pascal

Редактировать

Символы и основные операции над ними

Символы имеют тип char, занимают 2 байта и хранятся в кодировке Unicode (UTF-16).

var c1: char;
var c2 := 'z';

Для преобразования символа c в код используется функция Ord(c), для обратного преобразования кода i в символ используется функция Chr(i).

begin
  var c := 'ю';
  Print(Ord(c)); // 1102
  Print(Chr(1102)); // ю
end.

Классический способ определить символ, следующий за данным в кодовой таблице, — это преобразовать символ в код, прибавить к коду число и потом преобразовать полученный код снова в символ:

Аналогично определяется предыдущий символ

Методы типа char

Методы, встроенные в тип char, делятся на две категории:

  • проверяющие, принадлежит ли символ указанной категории: c.IsDigit, c.IsLetter, c.IsLower, c.IsUpper
  • преобразующие символ: c.ToUpper, c.ToLower, c.ToDigit.

Отметим, что c.IsDigit эквивалентно (c >= '0') and (c <= '9') и эквивалентно c in '0'..'9'
Для c.IsLower, c.IsLower, c.IsUpper такой простой аналогии нет. Дело в том, что в этих методах проверяются все символы, являющиеся буквами в каком-то алфавите народов мира (в частности, английские и русские)

Отметим также, что c.IsLower возвращает True только если это буква в нижнем регистре — для не букв возвращается False.

Строки

Введение

Отметим, что для строк имеется много операций и методов, не все из которых мы рекомендуем для школьников.

Основная причина — многие методы строк в .NET считают, что строки индексируются с нуля, а в Паскале строки индексируются с 1.

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

Индексация строк

Строки в Паскале индексируются с 1. К символам строк можно обращаться по индексам — s[i].

Например:

begin
  var s: string;
  s := 'тор';
  Print(s[1],s[2],s[3]);
end.

Символы строк можно менять:

begin
  var s := 'пир';
  s[1] := 'м';
  Print(s); // мир
end.

Можно использовать индексацию с конца: s[^i] обозначает i-тый символ с конца

begin
  var s := 'мир';
  s[^1] := 'г';
  Print(s); // миг
end.

Циклы по строкам

begin
  var s := 'привет';
  for var i:=1 to s.Length do
    s[i] := Chr(Ord(s[i])+1);
  Print(s);
end.  
foreach var c in s do
  Print(c);  

Операции +, *n и in

Строки можно складывать и умножать на целое положительное число

Пример. Генерация строки ‘abcdefghijklmnopqrstuvwxyz’

Идея. Начать с пустой строки. Всякий раз в цикле добавлять к строке символы от ‘a’ до ‘z’

Код

begin
  var s := '';
  for var c := 'a' to 'z' do
    s += c;
end.  

Методы Count, CountOf, Where

Чтобы посчитать количество символов в строке, удовлетворяющих определённому условию, используется метод Count. Если нужно посчитать, сколько раз встречается определенный символ, используется более простой метод CountOf

begin
  var s := 'абракадабра';
  s.CountOf('а').Print;
  s := 'а123бр45а67к89адабра';
  s.Count(c -> c.IsDigit).Print;
end.  

Если в строке надо отфильтровать только определенные символы, используется метод Where. Он возвращает последовательность символов, которую можно назад преобразовать к строке, используя метод JoinToString:

begin
  var s := 'а123бр45а67к89адабра';
  s := s.Where(c -> c.IsLetter).JoinToString;
end.  

s.ToWords и разбиение строки на слова

Метод s.ToWords разбивает строку на массив слов, используя пробел в качестве разделителя. Полученный массив можно преобразовать и слить в строку, используя метод JoinToString:

begin
  var s := 'как однажды жак звонарь головой сломал фонарь';
  var a := s.ToWords;
  Sort(a);
  s := a.JoinToString
end.  

По умолчанию JoinToString разделяет слова пробелами

Функция Pos и процедуры Delete, Insert

Pos(subs,s) возвращает позицию первого вхождения подстроки subs в сторке s или 0 если подстрока не найдена

Pos(subs,s,from) начинает искать подстроку в строке с позиции from.

Следующий код выводит позиции всех вхождений s1 в s:

begin
  var s := 'абракадабра';
  var s1 := 'бра';
  var p := Pos(s1,s);
  while p>0 do
  begin
    Print(p);
    p := Pos(s1,s,p+s1.Length);
  end;
end.

Для подсчета количества каких-либо символов, имеющихся в строке, можно использовать функции:

  • countof
  • count

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

Функция countof

Пусть дана строка

s:='231привет2432';

Вычислим количество цифр ‘2’:

d:=s.countof('2');

Функция s.countof(‘2’) подсчитывает количество цифр 2 в строке s, и в качестве своего аргумента использует символ 2, заключенный в апострофы.

Пример задачи 1

С клавиатуры вводится строка. Найти количество символов ‘Z’.

Программа решения на языке Паскаль

var s:string;k:integer;

begin

  readln(s);

  k:=s.Countof(‘Z’);

  println(k);

end.

Пример задачи 2

С клавиатуры вводится строка. Верно ли, что строка содержит символ ‘9’?

Программа решения на языке Паскаль

var s:string;k:integer;

begin

  readln(s);

  k:=s.Countof(‘9’);

  if k>0 then writeln(‘Строка содержит цифру 9’)

         else writeln(‘В строке нет цифр 9’);

end.

Функция count

Пусть дана строка

s:='flower555';

Вычислим количество цифр ‘5’:

d:=s.count(c->c='5');

Функция s.count(c->c=’5′) в качестве своего аргумента принимает логическое выражение (условие). Переменная c в данном случае должна быть описана типом char в блоке var.

Преимуществом функции count перед функцией countof можно считать возможность применения сложных условий.

Пример задачи 1

С клавиатуры вводится строка. Найти количество символов ‘Z’ и ‘A’.

Программа решения на языке Паскаль

var s:string;c:char;k:integer;

begin

  readln(s);

  k:=s.Count(c->(c=’Z’)or(c<=’A’));

  println(k);

end.

Результат выполнения программы

Количество букв Z и A в строке

Пример задачи 2

С клавиатуры вводится строка. Найти количество символов цифр.

Программа решения на языке Паскаль

var s:string;c:char;k:integer;

begin

  readln(s);

  k:=s.Count(c->(c>=’0′)and(c<=’9′));

  println(k);

end.

Результат выполнения программы

Количество символов цифр в строке

Пример задачи 3

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

Программа решения на языке Паскаль

var s:string;k:integer;c:char;

begin

  readln(s);

  k:=s.Count(c->not(c=’P’));

  println(k);

end.

Результат выполнения программы

Количество символов строки кроме P

0 / 0 / 0

Регистрация: 19.06.2014

Сообщений: 24

1

Подсчитать количество символов в слове

23.06.2014, 23:47. Показов 9434. Ответов 12


Студворк — интернет-сервис помощи студентам

Здравствуйте.
работа с строками.
Как подсчитать количество символов в слове и вывести его на экран в заданном пользователем тексте



0



Cyborg Drone

Модератор

9588 / 4908 / 3244

Регистрация: 17.08.2012

Сообщений: 15,334

24.06.2014, 00:31

2

Если строка s суть одно слово, то

Pascal
1
writeln(length(s));



0



0 / 0 / 0

Регистрация: 19.06.2014

Сообщений: 24

24.06.2014, 06:56

 [ТС]

3

нет, строка не 1 слово, а предложение и нужно вывести то которое подходит условию.



0



Модератор

9588 / 4908 / 3244

Регистрация: 17.08.2012

Сообщений: 15,334

24.06.2014, 08:15

4

lakys, вот странность… Вы по неясной причине упомянутое Вами условие не указали…



0



0 / 0 / 0

Регистрация: 19.06.2014

Сообщений: 24

24.06.2014, 09:14

 [ТС]

5

в любом случае есть предложение и нужно вывести конкретное слово которое выполняет условие в цикле.
к примеру есть предложение в нём условие : вывести все слова которые начинаются на «не» — вот как это осуществить в самом коде у меня и затруднение.
теперь думаю в полном объеме указал.



0



1 / 1 / 0

Регистрация: 19.08.2013

Сообщений: 7

24.06.2014, 09:15

6

Какое условие то? По которому то или иное слово мы будем выбирать.



0



Sergio Leone

2509 / 1130 / 582

Регистрация: 07.06.2014

Сообщений: 3,286

24.06.2014, 09:32

7

Цитата
Сообщение от bazarzhapov
Посмотреть сообщение

Какое условие то? По которому то или иное слово мы будем выбирать.

автор темы постом выше вашего ответил на этот вопрос…

lakys, всё просто. на форуме сотни примеров кода, как разобрать строку на отдельные слова.
Главное, что Вам нужно определится, как разделяются слова: пробелом(ами) или другими знаками…

И ещё, если нужно выделить слова, которые начинаются или заканчиваются на определённую букву, можно не выделять всё слово.
Вот, например, для слов, которые начинаются с «не»:

Pascal
1
2
3
4
s := ' '+s;
CountWord := 0;
for i:=1 to Length(s)-2 do
  if (s[i]=' ') and (s[i+1]='н') and (s[i+2]='е') then CountWord := CountWord + 1;



0



bormant

Модератор

Эксперт Pascal/DelphiЭксперт NIX

7534 / 4394 / 2785

Регистрация: 22.11.2013

Сообщений: 12,586

Записей в блоге: 1

24.06.2014, 09:38

8

Лучший ответ Сообщение было отмечено lakys как решение

Решение

> есть предложение и нужно вывести конкретное слово которое выполняет условие в цикле.

Pascal
1
2
3
4
5
6
7
8
9
10
e:=Pos('.',s);
if e>0 then Delete(s,e,Length(s));
s:=' '+s+' ';
b:=Pos(' не',s);
while b>0 do begin
  Delete(s,1,b);
  e:=Pos(' ',s);
  WriteLn(Copy(s,1,e-1));
  b:=Pos(' не',s);
end;



1



0 / 0 / 0

Регистрация: 19.06.2014

Сообщений: 24

24.06.2014, 09:52

 [ТС]

9

Sergio Leone, как определить это слово я понимаю а вот с тем как именно его вывести, а не всё предложение проблема. Просто у меня выводит слова начинающееся с «не» т.е. идет предложение в 1 момент стоит не и после выводит все до конца как бы мне определить конечный по счёту символ слова?

Добавлено через 9 минут
bormant спасибо, извените а можете еще показать как выводить более одного слова?



0



Sergio Leone

2509 / 1130 / 582

Регистрация: 07.06.2014

Сообщений: 3,286

24.06.2014, 09:58

10

lakys, такой пример устроит?

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var s, sl : string;
  i : integer;
begin
  s := 'вот просто небольшой пример кода по выделению слов';
  
  {поехали выделять слова}
  s := ' '+s+' ';
  sl := '';
  for i:=1 to Length(s) do
    if s[i]=' ' then begin
      if length(sl)>0 then WriteLn('слово: ',sl);
      sl := '';
    end
    else sl := sl + s[i];
end.



0



0 / 0 / 0

Регистрация: 19.06.2014

Сообщений: 24

24.06.2014, 10:29

 [ТС]

11

(ссылка на сторонний ресурс удалена)
текст:
невеста не нравится жениху.

невеста
количество слов на (не) — 2

я извеняюсь за ссылку если что.
мне надо чтобы выводило все слова на «не»
в вашем варианте оно выглядит вот так:

(ссылка на сторонний ресурс удалена)
текст:
жених не нравится невесте.

слово:
слово: жених
слово: не
слово: нравится
слово: невесте
количество слов на (не) — 2



0



bormant

Модератор

Эксперт Pascal/DelphiЭксперт NIX

7534 / 4394 / 2785

Регистрация: 22.11.2013

Сообщений: 12,586

Записей в блоге: 1

24.06.2014, 10:39

12

Лучший ответ Сообщение было отмечено lakys как решение

Решение

Цитата
Сообщение от lakys
Посмотреть сообщение

как выводить более одного слова?

Вопрос не понял.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var
  b, e: integer;
  s: string;
begin
  s:='немама немыла нераму.';
  e:=Pos('.',s);
  if e>0 then Delete(s,e,Length(s));
  s:=' '+s+' ';
  b:=Pos(' не',s);
  while b>0 do begin
    Delete(s,1,b);
    e:=Pos(' ',s);
    WriteLn(Copy(s,1,e-1));
    b:=Pos(' не',s);
  end;
end.

Код

немама
немыла
нераму

Вроде бы больше одного слова выведено, нет? Тогда в чем именно вопрос?



1



0 / 0 / 0

Регистрация: 19.06.2014

Сообщений: 24

24.06.2014, 11:39

 [ТС]

13

bormant выводится только 1ое слово с «не» а как сделать что бы выводило все слова с не?
Вот скрин (ссылка на сторонний ресурс удалена)

текст:
нерама немама немала немыла
нерама

Добавлено через 10 минут
bormant спасибо, ошибку свою обнаружил.
также всем спасибо за трату времени на меня)).



0



Перейти к содержанию

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

Просмотров 8.1к. Обновлено 15 октября 2021

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

Подсчет строк:
Ввести счетчик, присвоить ему 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.



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

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

Язык Си

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


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



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

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

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

Python

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



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

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

КуМир


использовать Файлы П
алг
нач
цел 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-256


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



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

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

Раздел: Стандартные функции Паскаля

Основы программирования 2.0

Основы программирования
Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать.
Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь.
Подробнее…

Функция Length в Паскале определяет длину строки. Синтаксис:


function Length(S : AStringType) : Integer;

Второй вариант для динамических массивов:


function Length(A : DynArrayType): Integer;

Функция возвращает длину
строки S, которая ограничена значением 255 для коротких строк (в классическом Паскале — это максимальная длина строки). Если S — это пустая строка, то функция возвращает 0.

Функция Length может вычислять длину строки для типов AnsiString и WideString.

Для динамических массивов функция возвращает количество элементов в массиве.

Функция определения длины строки Length также поддерживает параметры типа PChar
и PWideChar. В этом случае она работает также, как функции StrLen и WStrLen
соответственно. В этом случае функция вычисляет длину строки с нулевым
окончанием (с завершающим нулём), а время её выполнения пропорционально длине
строки, потому что завершающий нулевой символ ищется путём последовательного
перебора всех символов строки.

Как определить длину строки в Паскале

Думаю, уже понятно, что сделать это можно с помощью функции Length. Например, так:

str := '0123456789';
n := Length(str);

Однако есть и другой способ, о котором мало кто знает. Правда, этот способ можно использовать только с типом ShortString. Но в большинстве случаев этого строкового типа вполне достаточно.

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

А суть его проста. Дело в том, что в типе ShortString длина строки хранится в нулевом элементе строки. Как известно, в Паскале отсчёт символов в строке начинается с единицы. Однако в типе ShortString есть и нулевой элемент, в котором и хранится длина строки:

ch := str[0]; //Здесь хранится длина строки типа ShortString
WriteLn(Ord(ch), ' (', ch, ')');

Проблема только в том, что эта длина строки хранится как ASCII-код символа, и
получить этот элемент можно только как символ. Но это не беда, потому что мы уже
умеет преобразовывать символ в его код с помощью функции Ord.

Пример программы см. в конце статьи.

Как задать длину строки в Паскале

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

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

Задать длину строки в Паскале можно так:

s04 : string[4];   //Строка из 4-х символов
s20 : string[20];  //Строка из 20-ти символов

Затем с этими переменными можно работать как с обычными строками. Только следует помнить, что при попытке поместить, например, в s04 строку длиной более 4 символов, в эту строку будут помещены только первые четыре символа, а остальные будут отброшены.

Ниже приведён пример программы, где рассмотрены все вышеописанные случаи:

program lengthfunc;

var i, n, x : integer;
    ch      : Char;
    str     : ShortString;
    s04     : string[4];      //Строка из 4-х символов
    s20     : string[20];     //Строка из 20-ти символов

begin
  Randomize;
  str := '';
  n := Length(str);    //n = 0
  WriteLn(n);
  str := '0123456789';
  n := Length(str);    //n = 10
  WriteLn(n);
  for i := 1 to n do
    if i = n then Write(str[i])
    else Write(str[i] + '-');
  WriteLn;
  x := Random(26) + 1;
  str := '';
  for i := 1 to x do str := str + Chr(i+64);
  WriteLn(str);
  ch := str[0];   //Здесь хранится длина строки типа ShortString
  WriteLn(Ord(ch), ' (', ch, ')');

  str := '0123456789';
  s04 := str;
  s20 := str;
  WriteLn('str = ', str,    //Выведет 0123456789
          ', s04 = ', s04,  //Выведет 0123
          ', s20 = ', s20); //Выведет 0123456789

  ReadLn;
end.

Как стать программистом 2.0

Как стать программистом 2.0

Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки…
Подробнее…

Помощь в технических вопросах

Помощь в технических вопросах

Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение — ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации.
Подробнее…

Понравилась статья? Поделить с друзьями:
  • Как найти юриста для бизнеса
  • Болтается руль на велосипеде как исправить
  • Как найти импульс всей системы тел
  • Php как найти вхождение в строке
  • Как найти высоты треугольника по теореме пифагора