Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Contar cuantas palabras empiezan con May (https://www.clubdelphi.com/foros/showthread.php?t=73870)

luisito2011 20-05-2011 22:26:33

Contar cuantas palabras empiezan con May
 
Hola a todos.. saludos..
saben tengo un problema con esto
se supone que me deveria funcionar..

Código Delphi [-]
 
function ContarMay(s:string):integer;
var pal:string; Letra:char; i,c:integer;
begin
I:=1; pal:=' '; c:=0; s:=s+' ';
    while I <= Length(s) do
    begin
     letra:=s[i];
     if letra <> ' ' then
       pal:=pal+letra
        else
        if length(PAL) > 0 then
          begin
         if  (UPCASE(pal[1]) = pal[1]) then
 //En esta parte se supone que solo tiene q contar la 1ra de una 
            palabra y esa la convierte y pregunta si es = a la 1ra q no esta
            convertida...  ejem  'mama'  si M  = m , no.//
            pero cuenta todo no inporta si esta o no en mayuscula..
             begin
              c:=c+1;
              pal:=' ';
           end;
        end;
    i:=i+1;
    end;
  contarMay:=c;
end;
var
a:cvectors;
tp,i,N:integer;
s:string;
begin
a:=cvectors.crear; Readln(n);
a.dimencionar(n);
  for I := 1 to a.dimencion do
    begin
      readln(s);
      a.poner(i,s);
    end;
Tp:=0;
  for I := 1 to a.dimencion do
    begin
      Tp:=Tp + contarMay(a.elemento(i));
    end;
writeln(Tp);
readln;
end.

Aca con la unit que trabajo

Código Delphi [-]
 
unit unit1;
interface
uses
sysutils;
const
max=50;
type
            CVectorS=class
             S: array[1..max] of string ;
             N: integer;
             constructor crear ;
             procedure dimencionar(dim:integer);
             procedure poner(posi:integer ; que:string);
             procedure mostrar(var s:cvectorS);
             procedure insertar(posi:integer ; st:string);
             function elemento(posi:integer):string;
             function dimencion:integer;
         
implementation

constructor CVectorS.crear;
begin
   N:=0;
end;
function CVectorS.dimencion: integer;
begin
  dimencion:=N
end;
procedure CVectorS.dimencionar(dim: integer);
begin
  N:=dim;
end;
function CVectorS.elemento(posi: integer): string;
begin
  elemento:=s[posi];
end;
 
procedure CVectorS.insertar(posi: integer; st: string);
begin
   s[posi]:=st;
end;
procedure CVectorS.mostrar(var s: cvectorS);
var
  I: Integer;
begin
  for I := 1 to s.Dimencion do
  begin
    write(s.elemento(i):8);
  end;
end;
procedure CVectorS.poner(posi: integer; que: string);
begin
  s[posi]:=que;
end;
end.

quisiera que me diga si esta mal.. oh si hay otra forma mas simple..
oh si estoy pensando mal.. lo que hace upcase..

bueno gracias..

ecfisa 21-05-2011 00:03:57

Cita:

Contar cuantas palabras empiezan con May
Hola Luisito2011.

Confeccioné una función que devuelve la cantidad de apariciones de una palabra determinada dentro de una frase, ignorando mayúsculas / minúsculas. Si bién hay maneras mas simples y elegantes de hacerlo, me remití a usar las funciónes que ví en tu código.
Pero no me ajuste en absoluto a la unidad que adjuntas (que no leí). La intención es acercarte una idea, si la función requiere algún ajuste debido a alguna restricción impuesta por la tarea, te queda a vos ver como implementarla.

Código Delphi [-]
function ContarAparicion(Frase, Palabra: string): Integer;
var
  i,c: Integer;
  s: string;
begin
  Frase:= ' ' + Frase; 
  Result:= 0;
  for i:= 1 to Length(Frase) do
  begin
    if Frase[i] in[' ',',','.','(','"'] then //caracteres contemplados como inicio de palabra
    begin
      c:= i + 1;
      while UpCase(Frase[c]) = UpCase(Palabra[c-i]) do Inc(c);
      if c - i - 1 = Length(Palabra) then 
        Inc(Result);
    end;
  end;
end;

Ejemplos de llamada:
Código Delphi [-]
var
  Frase, Palabra: string;
begin
  Frase:= 'En Mayo comen mayonesa mayormente los mayores';
  Palabra:='may';
  ShowMessage(IntToStr(ContarAparicion(Frase,Palabra))); // resultado: 4
  Frase:= 'Unicamente una soga unia los árboles ';
  Palabra:= 'un';
  ShowMessage(IntToStr(ContarAparicion(Frase,Palabra))); // resultado: 3
end;

Saludos.

luisito2011 23-05-2011 00:09:44

Cita:




ups.. lo siento la palabra era mayuscula.. osea..
si la 1era letra de una palabra es mayuscula.. deveria contar..
... lo siento..

ecfisa 23-05-2011 02:01:32

Cita:

si la 1era letra de una palabra es mayuscula.. deveria contar..
Entonces es mucho más sencillo...
Código Delphi [-]
function ContarAparicion(Frase: string): Integer;
var
  i: Integer;
  InWord: Boolean;
begin
  Frase:= ' ' + Frase;
  Result:= 0;
  InWord:= False;
  for i:= 1 to Length(Frase)-1 do
  begin
    InWord:= not (Frase[i] in [' ',',','.']);
    if not InWord and (Frase[i+1] in ['A'..'Z']) then
     Inc(Result);
  end;
end;

Llamada:
Código Delphi [-]
...
  Frase:= 'Cuanto maYor seA la lONGITUD de La ConTraseña,' +
  'menor Es la proBABIlidad de que los ataques "por Fuerza brUTa" tengan Exito.';
  ShowMessage(IntToStr(ContarAparicion(Frase))); // Resultado: 6

Saludos.


La franja horaria es GMT +2. Ahora son las 01:38:14.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi