![]() |
|
|
#1
|
||||
|
||||
|
Помогите пожалуйста написать функцию кот. определяет входит ли данная цифра в заданную строку не менее 2-х раз. (желательно с пояснением
)зарание спасибо. |
|
#2
|
|||
|
|||
|
Цифра какой длинны? 1 символ или м.б. больше?
Если 1 - то просто идешь по строке, как по массиву и проверяешь каждый символ. Если больше, то чуть сложнее. PosEx тебе поможет. |
|
#3
|
|||
|
|||
|
Воть... что-т тип так?
Код:
Var S:String; // строка где будет поиск
Ch:String[1]; // символ поиска
Number,Count,Len,i:Byte;
MoreThenOne:Boolean; // ответ
begin
S:='jasfaf25jkaf53ld22xakh3g2';//ввод строки...мож через TEdit и тп...
Number:=2; // само число
Ch:=IntToStr(Number); // Перевод числа в знак
Len:=Length(S); // Определение длинны строки
For i:=1 to Len do // В цикле мы просматриваем каждый знак строки S
If (S[i] = Ch) then // и если i-тый знак равен числу тогда
Inc(Count); // увеличиваем счетчик на 1
If (Count >= 2) then // если счетчик более или равно 2 тогда
MoreThenOne:=True // ответ - да
Else // в противном случае
MoreThenOne:=False; // нет
End;Так? Или я что-т не так понял? |
|
#4
|
||||
|
||||
|
Ты многое не так понял
![]() |
|
#5
|
||||
|
||||
|
вот функция, определяющая сколько раз строка num появляется в строке s:
Код:
function gg(num, s: string): Integer;
var
tmp: string;
x, l: Integer;
begin
Result:= 0;
tmp:= s;
x:= Pos(num, tmp);
l:= Length(num);
while x > 0 do
begin
tmp:= Copy(tmp, x + l, Length(tmp));
inc(Result);
x:= Pos(num, tmp);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(gg(Edit2.Text, Edit1.Text)));
end; |
|
#6
|
||||
|
||||
|
posEx не пробовали?
|
|
#7
|
||||
|
||||
|
Цитата:
Спасибо то что нада осталось только разобраться в кодинге какая строчка за что отвечает, поможеш? ![]() |
|
#8
|
||||
|
||||
|
Код:
function gg(num, s: string): Integer;
var
tmp: string;
x, l: Integer;
begin
Result:= 0; //Устанавливаем значение функции на 0
tmp:= s; //Сохраняем строку во временной переменной (т.к. мы будем ее изменять)
x:= Pos(num, tmp); //Смотрим встречается ли num в s
l:= Length(num); //Определяем длину num (дабы не определять ее каждый раз в цикле)
//если x=0 тогда выход из функции (поэтому используем while, а не repeat)
while x > 0 do //Цикл работает пока строка num встречется в строке tmp
begin
tmp:= Copy(tmp, x + l, Length(tmp)); //удаляем из строки tmp начальные символы до позиции num + дляна num (т.к. Pos() ищет только первое вхождение одной строки в другую)
inc(Result); //Увеличиваем значение функции на 1, т.к. одно вхождение мы обнаружили
x:= Pos(num, tmp); //Смотрим встречается ли num в измененной строке tmp (если нет, то выход из цикла)
end;
end; |
|
#9
|
||||
|
||||
|
Ага понятно,
только 4EJIOBEK правильно понял задачу)) там кокрас надо узнать: проверяемая цифра встречается в числе 2 или более раза или нет) |
|
#10
|
||||
|
||||
|
Цитата:
Код:
var IsTrue: Boolean; begin IsTrue:= (gg(num, s) >= 2); end; |
|
#11
|
||||
|
||||
гыг я так и зделал ![]() |