Laboratório de Programação I Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Manipulando strings ** Créditos: Site: Dicas BCB - www.dicasbcb.com.br AnsiString O C++Builder implementa o tipo AnsiString como uma classe. Fornece vários métodos para tratamento de strings A classe AnsiString possui um bom nível de independência e flexibilidade nos controles onde é usada, uma vez que não é descendente de Tobject, permitindo-nos realizar diversas operações úteis com strings AnsiString Muitos controles usam propriedades da classe AnsiString. Por exemplo, todos os controles que possuem rótulo (forms, edits, panels, labels) usam AnsiString através da propriedade Caption. Outros controles como o EditBox usam a classe AnsiString como base de seus textos (propriedade Text). Se repararmos bem, notaremos que nós já temos usado e implementado objetos AnsiString sem qualquer espécie de declaração. Em outra situação qualquer, a declaração e inicialização de uma string sempre será necessária antes do uso respectivo. A classe String é análoga a classe AnsiString Uso de typedef faz a definição AnsiString A declaração de uma String é análoga à declaração de um tipo básico, porém usando a palavra AnsiString seguida de um nome válido C++. Eis um exemplo: AnsiString Pais; Também pode declarar uma variável dela com parênteses vazios, determinando a chamada do construtor da classe. Eis um exemplo: AnsiString Animal(); Depois de declará-la, pode-se determinar o valor desejado para a variável usando o nome escolhido. Eis um exemplo: AnsiString Especie; Especie = "Cachorro"; AnsiString Pode-se utilizar também o construtor da classe AnsiString Simbolo('T'); AnsiString Int(120); AnsiString AloTher("Alô, Thérbio"); AnsiString PtoFlut(675.15); AnsiString LongoInt(-73495745); AnsiString DplPrec(2.15e28); AnsiString Uso dos construtores para uso em componentes char Letra = 't'; Edit1 -> Text = AnsiString(Letra); um inteiro: Ou então Integer Numero = 256; Edit1->Text = AnsiString(Numero); AnsiString As Strings são tratadas como um array de caracteres ATENÇÂO: Começa em 1 e não em 0 MAIS ATENÇÃO AINDA: Se usado o indice 0 gera um ERRO Exemplo mostrando o primeiro caracter da string em um Label String s = "Oi cara de boi"; Label1->Caption = s[1]; Funções AnsiString Principais funções-membro da classe AnsiString AnsiString& __fastcall Insert(const AnsiString& str, int index); AnsiString& __fastcall Delete(int index, int count); AnsiString& __fastcall SetLength(int newLength); Int __fastcall Pos(const AnsiString& subStr) const; AnsiString __fastcall LowerCase() const; AnsiString __fastcall UpperCase() const; AnsiString __fastcall Trim() const; AnsiString __fastcall TrimLeft() const; AnsiString __fastcall TrimRight() const; AnsiString __fastcall SubString(int index, int count) const; Insert() AnsiString& __fastcall Insert(const AnsiString& str, int index); insere uma string especificada dentro de AnsiString, iniciando a inserção na posição determinada pela variável index. O exemplo abaixo leva um Label no Form. Quando o usuário dá um clique no Label, o programa providencia a inserção de uma string dentro de outra. void __fastcall TForm1::Label1Click(TObject *Sender) { AnsiString test = "O_ _está_feito"; Label1->Caption = test.Insert("grande_teste", 3); } Delete() AnsiString& __fastcall Delete(int index, int count); Remove um número especificado de caracteres de uma string. Inicia a contagem para a remoção na variável especificada por index, encerrando a exclusão com a remoção do último caracter contado para completar count: void __fastcall TForm1::Label1Click(TObject *Sender) { AnsiString test = "O_grande_teste_está_feito"; Label1->Caption = test.Delete(3, 12); Label1->Caption = test.Insert(" ", 3); } SetLength() AnsiString& __fastcall SetLength(int newLength); Determina um novo tamanho para a string, especificado por newLength, desde que esse novo comprimento seja menor do que o tamanho inicial. SetLength não pode aumentar o tamanho da string: void __fastcall TForm1::Label1Click(TObject *Sender) { AnsiString test = "O_grande_teste_está_feito"; Label1->Caption = test.SetLength(14); } Pos() int __fastcall Pos(const AnsiString& subStr) const; Retorna a posição do primeiro caracter de uma substring especificada na string. Se a substring não for encontrada na string, Pos() retorna “zero”. void __fastcall TForm1::Label1Click(TObject *Sender) { AnsiString test = "O_grande_teste_está_feito"; Label1->Caption = test.Pos("está"); } LowerCase() e UperCase() AnsiString __fastcall LowerCase() const; AnsiString __fastcall UpperCase() const;LowerCase() Transforma todas as letras da string para letras minúsculas e UpperCase() transforma todas para maiúsculas: void __fastcall TForm1::Label1Click(TObject *Sender) { AnsiString test = "O_grande_TESTE_está_FEITO"; Label1->Caption = test; Label2->Caption = test.LowerCase(); Label3->Caption = test.UpperCase(); } Trim() , TrimLeft() e TrimRight() AnsiString __fastcall Trim() const; AnsiString __fastcall TrimLeft() const; AnsiString __fastcall TrimRight() const; Podemos usar essas funções-membro para eliminar caracteres em branco no início (TrimLeft()), no final (TrimRight()) e no início e no final da string (Trim()): void __fastcall TForm1::Label1Click(TObject *Sender) { Label1->Color = clYellow; Label2->Color = clYellow; Label3->Color = clYellow; Label4->Color = clYellow; AnsiString test = " O grande teste está feito "; Label1->Caption = test; Label2->Caption = test.Trim(); Label3->Caption = test.TrimLeft(); Label4->Caption = test.TrimRight(); Substring() AnsiString __fastcall SubString(int index, int count) const; Retorna uma substring especificada de uma string. A substring inicia a contagem dos caracteres em index e termina de contá-los em count. Exemplo: // Coloca uma string em Edit1 Edit1 -> Text = "Meu pai se chama Julio Alves"; // Declara e inicializa a variável Frase com a string contida no texto de em Edit1 AnsiString Frase = Edit1 ->Text; /* Declara e inicializa a variável MeuPai com a string que começa no caracter 18 e termina no 28 de Frase*/ AnsiString MeuPai = Frase.SubString(18, 28); // Concatena string com MeuPai, imprimindo no Label1 Label1 -> Caption = "Papai se chama " + MeuPai; Length() Retorna o tamanho de uma string Exemplo mostrando em um Label o tamanho da string String s; s = Edit1->Text; Label1->Caption = s.Length(); Convertendo uma AnsiString para uma C string Existem algumas funções que exisgem o uso de uma string c (terminada com caracter null). Nesse caso precisamos fazer a conversão AnsiString aStr = ”Ober"; char *Text = aStr.c_str();