Как определить количество слов в строке? (предполагается, что строка уже нормализована, т.е. в ней убраны пробелы слева и справа и оставлено только по одному пробелу между словами. Если это не так, то сначала исходную строку надо нормализовать) // Способ первый (более сложный) Исходная строка портится ! {Смысл алгоритма: подсчитывается количество пробелов в нормализованной строке и – количество слов на 1 больше, чем количество пробелов. После того, как найден очередной пробел, он из строки удаляется. Вот из-за этого исходная строка и портится. Если это недопустимо, то необходимо работать с ее копией. } procedure TForm1.Button5Click(Sender: TObject); //Определение количества слов var k:integer; //количество слов st:string; //анализируемая строка begin //получаем исходную строку st:=Edit1.Text; //нормализуем полученную строку st:=Trim(st); while Pos( ' ', st ) > 0 do Delete( st, Pos( ' ', st ), 1 ); //подсчитываем количество слов в нормализованной строке if Length(st)>0 then begin k:=1; repeat if pos(' ',st)>0 then begin //если встретился пробел, то ... k:=k+1; //увеличиваем счетчик слов delete(st,pos(' ',st),1); //и удаляем пробел end; until pos(' ',st)=0; end else k:=0; //выводим результаты в Мемо Memo1.Lines.Add(''); Memo1.Lines.Add('Количество слов в строке = '+ IntToStr(k)); end; // Способ второй (самый простой) Здесь уже исходная строка не портится ! {Смысл алгоритма: также подсчитывается количество пробелов в нормализованной строке и – количество слов на 1 больше, чем количество пробелов. После того, как найден очередной пробел, он из строки не удаляется. Таким образом, исходная строка остается без изменения. } procedure TForm1.Button5Click(Sender: TObject); //Определение количества слов var k,i:integer; st:string; begin //получаем исходную строку st:=Edit1.Text; //нормализуем полученную строку st:=Trim(st); while Pos( ' ', st ) > 0 do Delete( st, Pos( ' ', st ), 1 ); //подсчитываем количество слов в нормализованной строке k:=0; for i:=1 to Length(St) do if (St[i]=' ') or (i=Length(St)) then k:=k+1; //выводим результаты в Мемо Memo1.Lines.Add(''); Memo1.Lines.Add('Количество слов строки = '+ IntToStr(k)); end; |
Как в строке найти слово с заданным номером ? (предполагается, что строка уже нормализована, т.е. в ней убраны пробелы слева и справа и оставлено только по одному пробелу между словами. Если это не так, то сначала исходную строку надо нормализовать) // Способ первый (более простой) procedure TForm1.Button1Click(Sender: TObject); //Определение слова с заданным номером var i,k,number:integer; St,st1:string; begin //получаем исходную строку St:=Edit1.Text; //нормализуем полученную строку st:=Trim(st); while Pos( ' ', st ) > 0 do Delete( st, Pos( ' ', st ), 1 ); //получаем заданный номер слова number:=StrToInt(Edit2.Text); //начинаем поиск слова с заданным номером k:=0; st1:=''; for i:=1 to Length(St) do //просматриваем исх.строку с начала и до конца if (St[i]=' ') or (i=Length(St)) then begin//если нашли очередн.слово,то... if i=Length(St) then st1:=st1+st[i];//если слово последнее,то доб.посл.с. k:=k+1; //запоминаем номер найден. слова if k=number then begin //если номер совпадает с заданным, то... Memo1.Lines.Add(''); //выводим найденное слово в Мемо Memo1.Lines.Add('Слово с номером '+IntToStr(number)+' = '+st1); Memo1.Lines.Add('(его длина = '+IntToStr(k)+')'); EXIT; //и полностью выходим из процедуры end else //иначе ...(номер слова не совпадает с заданным) st1:=''; //очищаем строку для следующего слова end else //иначе...(слово еще не закончилось) st1:=st1+St[i]; //добавляем очередной символ в слово end; // Способвторой (более сложный) procedure TForm1.Button8Click(Sender: TObject); //Определение слова с заданным номером var i:integer; st1:string; number:integer;//номер отыскиваемого слова (вводится) Adr, //адрес слова k, //счетчик количества символов в слове nn:integer; //счетчик номеров слов Label PDSTR; begin //получаем исходную строку St:=Edit1.Text; //нормализуем полученную строку st:=Trim(st); while Pos( ' ', st ) > 0 do Delete( st, Pos( ' ', st ), 1 ); //получаем заданный номер слова number:=StrToInt(Edit2.Text); //начинаем поиск слова с заданным номером nn:=1; //берем 1-е слово Adr:=1; //адрес 1-го слова PDSTR: k:=0; //очищаем счетчик количества символов в слове //определяем число символов nn-го слова for i:=Adr to Length(St) do if St[i]<>' ' then k:=k+1 //если не пробел, то увел.число симв.nn-го слова else break; //нашли nn-е слово с k симв. - выход из цикла if nn=number then begin //если слово с номером "number" найдено, то... st1:=copy(St,Adr,k); //копируем это слово (длиной k симв.) в "st1" Memo1.Lines.Add(''); //выводим его в Мемо Memo1.Lines.Add('Слово с номером '+IntToStr(number)+' = '+st1); Memo1.Lines.Add('(его длина = '+IntToStr(k)+')'); EXIT; //и выходим из процедуры end; //берем следующее слово и определяем его адрес nn:=nn+1; Adr:=Adr+k+1; //адрес следующ.слова=(нач.адрес)+(к-во симв.слова)+(1 проб.) goto PDSTR; end; |
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.