Ir para conteúdo
Fórum Script Brasil
  • 0

Verificar Numeros De Palavra Em Uma String


becONs

Pergunta

minha duvida é sobre como fazer um function que conte a quantidade de palavras em uma string eu fiz uma aqui mais contem erros, alguém poderia me ajudar?

function CountWords(var text: string): integer;
var tam,qtd,i,a: integer;
begin
  qtd:=0;
  tam := length(text);
  for i:= 1 to tam do
  begin
  a:=i+1;
     if (text[i] =' ') then
     else
    begin
    if (text[a] =' ') or (text[i] =text[tam])then
      qtd:=qtd+1;
    end;
    end;
  CountWords:=qtd;
end;
no caso ele vai verificar caracter por caracter e se for espaço ele pula, se não for ele vê se o caracter seguinte é um espaço não sendo ele conta 1, e faz o for ateh completar o length e pra chamar ela no prog principal:
if menu = 2 then
begin
quant:= CountWords(text);
  writeln(text);
  writeln('Quantidade de palavras = ', quant);
  writeln('Aperto ENTER para volta para o menu');
  readln;
end;

grato :P

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

opa

tenta assim

function countwords(const text: String; bskipspace: boolean): Integer;

var

i, ispaces: Integer;

begin

ispaces := 0;

for i := 1 to length(text) do

if (text = ' ') then

ispaces := (ispaces + 1);

if (bskipspace) then

Result := (length(text) - ispaces) else

Result := length(text);

end;

ai se você quiser que conta os espaços você coloca false se não quiser que conta voce coloca true o bskipspace

no seu caso

quant:= CountWords(text, true);

seria isso?

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
function NumWords(st:string) :byte; 
var
  w,i : byte;
  aux : string;
begin
  if (Trim(st) = '') then
  w := 0
  else begin
    aux := Trim(st);
    w := 1; 
    For i := 2 to length(aux) do
    if (aux[pred(i)]=#32) and (aux[i] <> #32) then inc(w);
  end;
NumWords := w;
end;

Link para o comentário
Compartilhar em outros sites

  • 0
opa

tenta assim

function countwords(const text: String; bskipspace: boolean): Integer;

var

i, ispaces: Integer;

begin

ispaces := 0;

for i := 1 to length(text) do

if (text = ' ') then

ispaces := (ispaces + 1);

if (bskipspace) then

Result := (length(text) - ispaces) else

Result := length(text);

end;

ai se você quiser que conta os espaços você coloca false se não quiser que conta voce coloca true o bskipspace

no seu caso

quant:= CountWords(text, true);

seria isso?

Vai me desculpar Churc, mas essa função sua não conta o número de palavras em uma string nem de longe. Não chegou nem perto.

Link para o comentário
Compartilhar em outros sites

  • 0

Pessoal, sou "obrigado" a postar esta opção. Adoro as possibilidades do TStringList, e esta é mais uma delas.

function ContaPalavras(Texto :String) :Integer;
var
  Lista :TStringList;
begin
  with TStringList.Create do
  begin
    Delimiter := ' ';
    DelimitedText := Texto;
    Result := Count;
    Free;
  end;
end;

Podem perguntar: por que utilizar uma classe (robusta se comparado com um simples algorítimo) para contar palavras? A resposta é que com ela, no caso de realmente ser passado um texto onde aparecem o avanço de linha (#13 e/ou #10, não previstos nos algorímos propostos, mas que podem serem incluídos) ou sequência de espaços concatenados, o resultado estará sempre correto e sem muito esforço. ;)

[]s

Link para o comentário
Compartilhar em outros sites

  • 0
A resposta é que com ela, no caso de realmente ser passado um texto onde aparecem o avanço de linha (#13 e/ou #10, não previstos nos algorímos propostos, mas que podem serem incluídos) ou sequência de espaços concatenados, o resultado estará sempre correto e sem muito esforço.

Micheus, acho que você não reparou bem na função que eu postei aqui. Ela conta o número de palavras independentemente do numero de espaços que hajam na string. E quanto a quebra de linha, modificando apenas uma linha é possível resolver isso. Ok?

Link para o comentário
Compartilhar em outros sites

  • 0
Micheus, acho que você não reparou bem na função que eu postei aqui. Ela conta o número de palavras independentemente do numero de espaços que hajam na string.
Thales reparei sim! E é um bom algorítimo.

E quanto a quebra de linha, modificando apenas uma linha é possível resolver isso. Ok?
Foi o que eu "disse": (#13 e/ou #10, não previstos nos algorímos propostos, mas que podem serem incluídos)

Foi apenas para apresentar mais uma utilidade do TStringList, útil para muito mais que uma lista de strings.

[]s

Link para o comentário
Compartilhar em outros sites

  • 0

function NumWords(st:string) :cardinal; 
var
  w,i : cardinal;
begin
  if (Trim(st) = '') then
  w := 0
  else begin
    st := Trim(st);
    w := 1; 
    For i := 2 to length(st) do
    if (st[pred(i)]<=#32) and (st[i] > #32) then inc(w);
  end;
  Result := w;
end;

Pronto, adaptada para Delphi. Era de uma unit do Turbo Pascal. Agora aceita quebra de linha, já que todos os caracteres abaixo de #32 são caracteres de controle e não devem ser considerados palavras.

Link para o comentário
Compartilhar em outros sites

  • 0

function NumWords(st:string) :byte; 
var
  w,i : byte;
  aux : string;
begin
  if (Trim(st) = '') then
  w := 0
  else begin
    aux := Trim(st);
    w := 1; 
    For i := 2 to length(aux) do
    if (aux[pred(i)]=#32) and (aux[i] <> #32) then inc(w);
  end;
NumWords := w;
end;

Thales eu usei esse codigo, se não for pedir muito a voce ou alguma outra pessoa que possa me ajudar, voce poderia explicar algumas coisas que eu não entendi pois sou novato, no caso, qual o funcionamento {if (Trim(st) = '') then} trim seria o que? {if (aux[pred(i)]=#32) and (aux <> #32) then inc(w);} o pred e o inc seriam o que?

Grato desde já.

ps: eu testei o StringList ele falou que não existe StingList. Lembrando que meu compilador é o DevPascal

Link para o comentário
Compartilhar em outros sites

  • 0
Thales eu usei esse codigo, se não for pedir muito a voce ou alguma outra pessoa que possa me ajudar, voce poderia explicar algumas coisas que eu não entendi pois sou novato, no caso, qual o funcionamento {if (Trim(st) = '') then} trim seria o que? {if (aux[pred(i)]=#32) and (aux <> #32) then inc(w);} o pred e o inc seriam o que?
Opa, Trim é a função que retorna uma string sem os espaços do início e final. Pred é a função que retorna o predecessor de um número. Succ é a função que retorna o successor de um número. Inc é o procedimento que incrementa um número. Dec é o procedimento que decrementa um número ->

( pred(5) = 4 );
( succ(5) = 6 );

I:=5;
inc(I);
( I = 6 );

I:=5;
dec(I);
( I = 4 );

I:=5;
inc(I,3);
( I = 8 );

I:=5;
dec(I,3);
( I = 2 );

ps: eu testei o StringList ele falou que não existe StingList. Lembrando que meu compilador é o DevPascal
Toma vergonha na cara, mete um Delphi aí. Não que o dev pascal não seje bom, mas o Delphi é muito mais completo.
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...