Найти слово под заданным номером

Задача

Найти слово, стоящее в тексте под определенным номером, и вывести его первую букву.

Решение

 

Описание переменных: 

  • count - счетчик слов;
  • flag - "сигнализатор" о нахождении внутри слова.

Алгоритм решения задачи: 

  1. Если очередной символ не пробел, и мы не находимся внутри слова, то увеличить переменную-счетчик слов и запоминать, что находимся внутри слова. Если счетчик слов равен искомому по счету слову, то завершить выполнение цикла.
  2. Когда встречается пробел, сообщать, что вышли из слова.

Программа на языке Паскаль: 

 

var
    str: string;
    len, count, flag, i, n: byte;
 
begin
	writeln('String: '); readln(str);
	write('Word №: '); readln(n);
	len := length(str);
	count := 0;
	flag := 0;
	for i:=1 to len do begin
		if (str[i] <> ' ') and (flag = 0) then begin
			count := count + 1;
			flag := 1;
			if count = n then break; 
		end;
		if str[i] = ' ' then flag := 0;
	end;
 
	writeln(str[i]);
end.

 

Пример выполнения кода:

String: 
hello world big    ban lala uuu vasy
Word: 5
l

 

Тема

Строки

Уровень

Комбинированные задачи

Теги

Комментарии

Нужна программка, которая ищет слово, стоящее в тексте под определенным номером, и выводит первую букву этого слова.

Ответ на от Гость

program dem;
uses crt;
var f:text;
s:string;
w,z,p,i:integer;
a:array[1..255] of string;
 
procedure vvod;
begin
assign(f,'input.txt');
reset(f);
readln(f,s);
writeln(s);
end;
 
procedure find;
begin
z:=0;
p:=pos(' ',s);
Repeat
if p=1
then delete(s,p,1)
else begin
     z:=z+1;
     a[z]:=copy(s,1,p-1);
     delete(s,1,p);
     end;
p:=pos(' ',s);
until p=0;
end;
 
procedure vuvod;
begin
for i:=1 to z do
        begin
        writeln(i,' ',a[i]);
        end;
end;
 
 
procedure daw;
begin
writeln('Nomer slova');
readln(w);
while (w>z) or (w<1) do
        begin
        writeln('Takogo nomera net');
        readln(w);
        end;
writeln(copy(a[w],1,1));
end;
 
procedure daw1;
begin
writeln('Nomer slova');
readln(w);
if (w<=z) and (w>=1)
then writeln(copy(a[w],1,1))
else begin
     writeln('Takogo nomera net');
     daw1;
     end;
end;
 
begin
clrscr;
vvod;
find;
vuvod;
daw1;
readln;
end.

program nomerslova;
uses crt;
var  s,word: string; i,m,k,n:integer;
begin
    clrscr;
    writeln('Vvedite stroku: ');
    readln(s);    //вписываем строку
    for i:=1 to length(s) do
     delete(s,pos('  ',s),1);   //удаляем лишнее пробелы внутри
    if s[1]=' ' then delete(s,1,1);  //удаляем пробел сначала, если он есть
    if s[length(s)]<> ' ' then s:=s+' ';   // в конце должен стоять пробел, чтоб выводить последнее слово
    for i:=1 to length(s) do
    if (s[i]='!') or  (s[i]='.') or  (s[i]=',') or  (s[i]='(') or (s[i]=')') or (s[i]='?')   then
    delete(s,i,1);   // тут мы удаляем лишние разделители
    k:=1;
    for i:=1 to length(s) do
    if s[i]=' ' then k:=k+1;
    n:=0;
    while (n>k) or (n<=0)do
    begin
    write('Vvedite nomer slova: ');read(n);writeln;  // Вводим номер нашего слова
    end;
    k:=0; word:='';
    for i:=1 to length(s) do
    begin
        if s[i]<>' ' then
        begin
            k:=k+1;  // тута увеличиваем длину слова, пока на встретим пробел
        end
        else
        begin
            m:=m+1;  // когда встретим пробел, увеличиваем номер слова на+1
            word:=copy(s,i-k,k);  // Записываем само слово в переменную Word 
            if m=n then  
            begin    
                write(word);
                break; //если это искомое слово, то выводим его и останавливаем цикл
            end;
            k:=0;  //если это не есть искомым словом, то идем дальше
        end;
    end;
    readln;readln;
end.

Добавить комментарий