Страница 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)]:='.';