Помощь - Поиск - Пользователи - Календарь
Полная версия: Найти число букв в строке
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Alucard
Дана символьная строка. Подсчитать в ней количество вхождений букв г, k, t.

Использую 2 версии паскаля, но код работает неверно в обоих. алгоритм if s[i]=x then find:=p+1; всегда равен 1, а если буквы в строке нет, то значение выставляется 85 в одной версии и 93 в другой 0_о. Где мой косяк?

Код
program new;
uses    crt;
var     s:string;
        i:integer;

function find(x:string):byte;
var      p:byte;
begin
     for i:=1 to length(s) do
         if s[i]=x then find:=p+1;
end;

begin
     clrscr;
     writeln('VVedite stroky');
     readln(s);
     writeln('Bykv r ',find('r'));
     writeln('Bykv k ',find('k'));
     writeln('Bykv t ',find('t'));
     readln;
end.
Ozzя
function find(x:string):byte;
var p:byte;
begin
for i:=1 to length(s) do
if s[i]=x then p:=p+1;
find:=p;
end;
Alucard
Ozzя
Спасибо!!!
Код
function find(x:string):byte;
var      p:byte;
begin
     p:=0;
     for i:=1 to length(s) do
         if s[i]=x then p:=p+1;
     find:=p;
end;


Вот так всё работает!
volvo
Цитата
Вот так всё работает!
Все-таки, на будущее... Если тебе надо искать букву (т.е., символ), то и передавай символ, а не строку:
function find(x: char):byte;
И понятнее, что от функции требуется, и оградит тебя от проблем, скажем, при попытке посчитать слова, а не буквы:

s := 'Вот это да!!!';
writeln('Слов "да": ', find('да'));
(раз написано, что принимает строку, даже не сомневайся, кто-нибудь все равно в эту функцию строку передаст. А ты делай так, чтоб ошибка возникнуть вообще не могла).
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.