Jump to content


Photo

Cuantos caracteres hay en una palabra


  • Please log in to reply
3 replies to this topic

#1 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4483 posts
  • LocationVenezuela

Posted 05 January 2011 - 08:26 AM

Sera que la VCL tiene una funcion para determinar cuantas veces se repite un caracter en la palabra o hay que hacerlo a pulso.




delphi
  1. function ContarCaracter(cPalabra, cCaracter: String): Integer;
  2. var
  3.   nIdx: Integer;
  4.   nCuantos: Integer;
  5. begin
  6.   nCuantos := 0;
  7.   for nIdx := 0 to Length(cPalabra) - 1 do
  8.   begin
  9.       if Copy(cPalabra, nIdx, 1) = cCaracter then
  10.         inc(nCuantos);
  11.   end;
  12.   Result := nCuantos;
  13. end;



Alguien sabe si existe?
  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14469 posts
  • LocationMéxico

Posted 05 January 2011 - 08:45 AM

No se si exista una función que haga eso, pero hay muchas opciones para hacerlo, esta es mi propuesta :p



delphi
  1. function ContarLetras(cadena:string;caracter:char):integer;
  2. var
  3. lineas: TStringList;
  4. begin
  5. lineas := TStringList.Create;
  6. Lineas.StrictDelimiter := true;
  7. Lineas.Delimiter := Caracter;
  8. Lineas.DelimitedText := cadena;
  9. result := Lineas.Count-1;
  10. lineas.Free;
  11. end;
  12.  
  13. procedure TForm1.Button1Click(Sender: TObject);
  14. begin
  15.   ShowMessage(inttostr(ContarLetras('Returns the index value of a substring.','e')));
  16. end;



Salud OS
  • 0

#3 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6301 posts
  • LocationArgentina

Posted 05 January 2011 - 09:11 AM

No debería resultarnos raro el que si exista, después de todo el problema que comenta Eduardo es típico y muchas veces nos hemos envuelto en él.

De existir lo más probable es que esté en la unidad StrUtils. Pero al menos hasta en D6 no veo alguna función que vaya en ese sentido. ¡Que extraño!

Lo que si yo lo encararía de otra forma Eduardo... tu función hace llamadas a la función Copy() a mi en lo personal me parece innecesario esto. Máxime sabiendo que podemos tratar al string de forma directa. Sería mucho más rápido algo como esto:



delphi
  1. result := 0;
  2. for i := 1 to Length(Text) do
  3.   if Text[i] = char
  4.     then inc(result)



De paso nos ahorramos la variable contador ;)

La técnica de Eliseo, que no deja de ser igualmente interesante, es más del tipo cañonazo. Es demasiado para algo que puede encararse por un modelo más simple. ¡Se está creando un TStrinList para utilizar la técnica del delimitador y trozar el string original.

Volvamos a los clásicos.  :D

Saludos,
  • 0

#4 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4483 posts
  • LocationVenezuela

Posted 05 January 2011 - 09:24 AM

Gracias por las propuestas, estan bien buenas
  • 0




IP.Board spam blocked by CleanTalk.