Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Паскаль. Строки.


Автор: MonEnnemi 6.1.2010, 18:09
Очень нужна помощь в строках)

Есть задание:
Удалить в строке слова, которые встречаются в ней указанное число раз.

При этом такой вариант написания программы не подходит, потому что сравнивает слова поэлементно:


Цитата

program stroka;
uses crt;
var a:string;
b:array[1..60]of string;
i,k,n,t,m,j:byte;
begin
clrscr;
writeln('vvedite stroku');
readln(a);
writeln('vvedite chislo');
readln(n);
a:=' '+a+' ';
for i:=1 to length(a) do
if a[i]=' 'then inc(k)else b[k]:=b[k]+a[i];
for i:=1 to k do
begin
m:=0;
for j:=1 to k do
if b[i]=b[j] then inc(m);
if m=n then
begin
for t:=length(a)downto 1 do
if copy(a,t,length(b[i])+2)=' '+b[i]+' ' then delete(a,t,length(b[i])+1);
end;
end;
writeln(a);
readln;
end.

Помогите, пожалуйста)

Автор: ~FoX~ 6.1.2010, 23:27
MonEnnemi, А как должно сравнивать?

Автор: MonEnnemi 6.1.2010, 23:39
~FoX~, 
Нужно, сравнивать слова... То есть воспользоваться нахождением позиции пробела, но я не очень понимаю, как это все организовать, чтобы правильно работало(

Автор: ~FoX~ 7.1.2010, 09:25
Вот так получаешь отдельные слова
Код

var
  EnteredString: string;
  TempString, TempWord: string;
  WordCount, DuplicateCount: integer;
  i, j: integer;
begin
  ClrScr;
  WriteLn('Enter your string');
  ReadLn(EnteredString);
  EnteredString := EnteredString + ' ';
  TempString := EnteredString;
  WriteLn('Enter word count');
  ReadLn(DuplicateCount);
  j := 0;
  WordCount := 0;
  for i := 0 to Length(TempString) do begin
    if TempString[i] = ' ' then begin
      TempWord := copy(TempString, j, i-j);
      j := i+1;
      WordCount := WordCount+1;
       {Здесь проверяешь количество вхожений}
    end;
  end;


Потом проверяешь количество вхождений слова в строку StrPos тебе поможет в этом.

Автор: MonEnnemi 7.1.2010, 16:19
Спасибо большое)

Тогда получается, что удаление этих слов надо будет организовать как-то так:

Цитата

for i := 0 to Length(TempString) do
           delete(TempString, pos(TempWord + ' ', TempString), length(TempWord)+1);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)