Страница 2 из 2

Re: Строки?Строки!Ох уж эти строки..ТР

Добавлено: 26 ноя 2008, 09:40
demon416
насчет 0 и -1 ввел в заблуждение :( (давно с паскалем не работал),надо от 1 до длины строки

Код: Выделить всё

program zvezdochki;
var
s: string;
i,pered,posle: integer;
flag: boolean;

begin
s:='*rty*try*ertg*sdfg*ghk*hjk*:fdg*asef*sfg*bnm*wer';
pered:=0;
posle:=0;
flag:=false;

for i:=1 to length(s) do
begin
if s[i]=':' then
flag:=true;
if s[i]='*' then
if flag=false then
pered:=pered+1
else
posle:=posle+1;
end;

writeln(s);
writeln('pered = ',pered);
writeln('posle = ',posle);
readln;
end.

Re: Строки?Строки!Ох уж эти строки..ТР

Добавлено: 26 ноя 2008, 18:53
Mary Yu
2 demon416
По первой задачке:
между буквами уберутся только пробелы,а точками разделятся не будут ><

Код: Выделить всё

program ex1;
var
s: string;
begin
s:= ' dfdf dfdf dfdf  dvfdv  dfdf   ddf   ';
writeln(s);                         <выводим строку на экран>
while pos('  ',s)<>0 do      <  пока в строке s есть слово не равное нулю(я так              
delete(s,pos('  ',s),1);                        понимаю) удаляем 2 пробела>    
while pos(' ',s)<>0 do      <а теперь для 1 пробела >
begin
insert('.',s,pos(' ',s));     <как все пробелы удалены вставляем точку>
delete(s,pos(' ',s),1);
end;
if s[length(s)] = '.' then   а это ещё что???<если строка с точкой,то удаляем на 1   
delete(s,length(s),1);                           букафку?>  
writeln(s);                        <выводим что получилось>
readln;                            < конец.>
end.
Не получаецо! Т.т

Re: Строки?Строки!Ох уж эти строки..ТР

Добавлено: 26 ноя 2008, 19:38
Mary Yu
Во 2 проге в предпоследнем end; экран выдает "." expected ...
Объясните ,пожалуйста,почему temp:=s;?
оно будет возвращать номер позици в строке s?

Мой мозг взорван..ещё сутки и я увязну в строках.

Re: Строки?Строки!Ох уж эти строки..ТР

Добавлено: 26 ноя 2008, 20:46
demon416
обе программы проверенны и работают ошибки могут быть только если их неправильно перенабрали
попробуй скопировать текст в блокнот и сохранить с расширением pas, а потом откроеш из паскаля
первая программа

Код: Выделить всё

program ex1; //название программы
var // далее будет обьявление переменных
s: string; // s типа string тоесть строка
begin // начало программы
s:= ' dfdf dfdf dfdf  dvfdv  dfdf   ddf   '; // заносим строку в s
writeln(s); // выводим s на экран
//в итоге следующих двух строк в строке s остануться только одинарные пробелы
while pos('  ',s)<>0 do // пока в строке встречается сдвоенный пробел
delete(s,pos('  ',s),1); // удалять первый из двух пробелов
//в итоге следующих пяти строк в строке s все пробелы будут заменены точками
while pos(' ',s)<>0 do //пока в строке s пробелы
begin //начало повторяющегося пока не закончаться пробелы блока
insert('.',s,pos(' ',s)); //вставить точку перед пробелом
delete(s,pos(' ',s),1); //удалить пробел
end;//конец повторяющегося пока не закончаться пробелы блока

if s[length(s)] = '.' then //если последний символ в строке s точка
delete(s,length(s),1); // удалить последний символ в строке s
writeln(s); // вывести s на экран
readln; // прочитать с клавиатуры (задержка перед выключением)
end.//конец программы
вторая программа

Код: Выделить всё

program ex2; //название программы
var // далее будет обьявление переменных
s,s1,temp: string;// s,s1,temp типа string тоесть строки
i,j: integer; //i,j типа integer тоесть целые числа
begin// начало программы
s:= 'sdgfsdrgcv sdfsdf sertgefwbv drgcv drgcv ';// заносим строку в s
s1:='drgcv';// заносим подстроку в s1
j:=0;// заносим ноль в j
temp:=s;// копируем строку из s в temp
if pos(s1,s)=0 then //если подстрока s1 отсутствует в строке s 
writeln(s) //выводим s на экран
else //если же подстрока s1 присутствует в строке s 
begin //начало блока выполняемого если  подстрока s1 присутствует в строке s 
while pos(s1,temp)<>0 do //пока в в строке temp встречается подстрока s1
begin//начало блока выполняемого если  в строке temp встречается подстрока s1
i:=pos(s1,temp); // сохраняем в i позицию начала подстроки s1 в  строке temp
j:=j+1;//Увеличиваем  j счетчик удаленных из строки temp символов
delete(temp,i,1);удаляем первую букву вхождения подстроки s1  строку temp
end;//конец блока выполняемого если  в строке temp встречается подстрока s1 
delete(s,i+j-1,length(s1));//удаляем из строки s последнее вхождение подстроки s1
// начало последнего вхождения вычисляется как сумма позиции последнего вхождения подстроки s1 в строку temp + количество удаленных из строки temp
// букв минус один(потому что после нахождения последнего вхождения подстроки s1  в строку temp удаляеется первая буква последнего вхождения) 
end;//конец блока выполняемого если  подстрока s1 присутствует в строке s 
writeln(s);//вывод строки s на екран
readln; // прочитать с клавиатуры (задержка перед выключением)
end.//конец программы

Re: Строки?Строки!Ох уж эти строки..ТР

Добавлено: 29 ноя 2008, 15:06
Хыиуду
while pos(' ',s)<>0 do //пока в строке s пробелы
begin //начало повторяющегося пока не закончаться пробелы блока
insert('.',s,pos(' ',s)); //вставить точку перед пробелом
delete(s,pos(' ',s),1); //удалить пробел
end;//конец повторяющегося пока не закончаться пробелы блока

Это замечательно заменяется на
while pos(' ',s)<>0 do s[pos(' ',s)]:='.';