Ir al contenido


Foto

Poner en mayúscula la primera letra de cada palabra


  • Por favor identifícate para responder
8 respuestas en este tema

#1 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 24 septiembre 2009 - 05:42

Con este algoritmo podemos hacer que la primera letra de cada palabra en una cadena sean mayúsculas, aquí el code:


delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   i: Integer;
  4.   Str: string;
  5. begin
  6.   Label2.Caption:='';
  7.   Str:=' '+Edit1.Text;
  8.   i:=1;
  9.   repeat
  10.     if Str[i]<>' ' then
  11.       Label2.Caption:=Label2.Caption+Str[i];
  12.     if Str[i]=' ' then
  13.     begin
  14.       if (Str[i+1]<>' ') then
  15.       begin
  16.         Label2.Caption:=Label2.Caption+Str[i]+AnsiUpperCase(Str[i+1]);
  17.         Inc(i);
  18.       end
  19.       else
  20.         Label2.Caption:=Label2.Caption+Str[i];
  21.     end;
  22.     Inc(i);
  23.   until i&gtLength(Str)+1;
  24.   Str:=Label2.Caption;
  25.   Delete(Str, 1, 1);
  26.   Label2.Caption:=Str;
  27. end;

Saludos.
  • 0

#2 anubis

anubis

    Advanced Member

  • Miembros
  • PipPipPip
  • 53 mensajes
  • LocationMéxico

Escrito 24 septiembre 2009 - 06:18

Hola

Otra Alternativa A Tu Código ;)


delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var
  3.   indice: integer;
  4.   Temp,Cadena: string;
  5. begin
  6.   Temp  := StringReplace(edit1.text,edit1.text[1],AnsiUppercase(edit1.text[1]),[]);
  7.   Cadena := Temp;
  8.   while Pos(' ',Temp) > 0 do
  9.   begin
  10.     Indice := Pos(' ',Temp);
  11.     Cadena := StringReplace(Cadena,' '+Cadena[indice+1],' '+AnsiUppercase(Cadena[indice+1]),[]);
  12.     Temp[Pos(' ',Temp)] := '_';
  13.   end;
  14.   ShowMessage(Cadena);
  15. end;


  • 0

#3 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 24 septiembre 2009 - 06:23

Excelente amigo Anubis, cualquier alternativa es bienvenida ;)
  • 0

#4 rgstuamigo

rgstuamigo

    Member

  • Miembros
  • PipPip
  • 33 mensajes
  • LocationSanta Cruz-Bolivia

Escrito 26 noviembre 2009 - 03:02

Pues aqui va otra alternativa sacado de trucomania ;) ,pero en este caso se aplica directamente al escribir en un Edit:
   
delphi
  1. procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
  2.   begin
  3.       with Sender as TEdit do
  4.         if (Text = '')
  5.         or (Text[SelStart] = ' ')
  6.         or (SelLength = Length(Text)) then
  7.             if Key in ['a'..'z'] then  Key := UpCase(Key);
  8.   end;

Saludos... (y)
  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 26 noviembre 2009 - 03:33

Gracias por el aporte amigo rgstuamigo (y) :D
  • 0

#6 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 27 noviembre 2009 - 08:56

Bueno... ¿Y que tal un poco de C++?
 


cpp
  1. String PonMayusculas(String S)
  2. {
  3.   char* C = S.c_str();
  4.   do{
  5.     *C = toupper(*C);
  6.     C = strchr(C, ' ');
  7.     if(C) C++;
  8.     else break;
  9.   }while (*C);
  10.   return S;
  11. }

O si se prefiere mas compacto:


cpp
  1. String PonMayusculas(String S)
  2. {
  3.   char* C = S.c_str()-1;
  4.   do{
  5.     *++C = toupper(*C);
  6.     C = strchr(C, ' ');
  7.   }while (C);
  8.   return S;
  9. }


Saludos.


  • 0

#7 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 28 noviembre 2009 - 09:36

Saludos.

Esta solución es para los que tienen las JEDI instaladas:

1.- Se debe de poner en uso la unidad SysUtils.
2.- Se debe de poner en uso la unidad JvJCLUtils.
3.- Se hace uso de la función AnsiProperCase.

Descripción:

delphi
  1. { Returns string, with the first letter of each word in uppercase,
  2.   all other letters in lowercase. Words are delimited by WordDelims. }
  3. function AnsiProperCase(const S: string; const WordDelims: TSysCharSet): string;

Ejemplo:

delphi
  1. Edit2.Text := AnsiProperCase(Edit1.Text, [' ']);


  • 0

#8 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 28 noviembre 2009 - 03:32

Otra Implementación, esta vez en delphi. los cambios se realizan en el mismo String que se devuelve cambiado:


delphi
  1. var
  2.   i: integer;
  3. begin
  4.   S[1]:= PCHAR(AnsiUpperCase(S[1]))^;
  5.   for i:=1 to Length(S) do
  6.   begin
  7.     if S[i]=' ' then  S[i+1]:= PCHAR(AnsiUpperCase(S[i+1]))^;
  8.   end;

Saludos.
  • 0

#9 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 28 noviembre 2009 - 07:40

Excelente, más variaciones :D (y).
  • 0




IP.Board spam blocked by CleanTalk.