Eu ainda tenho uma revista da Turma da Mônica de uns 15 ou 20 anos atrás onde a Mônica e a Magali começam a usar o código "Zenit Polar" em suas conversas, assim o Cebolinha e o Cascão jamais descobririam o que elas estavam falando. O problema foi que elas "viciaram" no tal código e se esqueceram como é que se fala normalmente... Funciona assim:
ZENIT
POLAR
Em todas as palavras, troque o Z pelo P, o E pelo O, o N pelo L, o I pelo A, o T pelo R... vale o inverso também. Por exemplo, Concatenum.com seria grafado como "Celcirolum.cem". Entendeu ? O bom fican do cedafacir, o e roxre faci ztiracimolro anogavon so veco loe celhoco e sasromi ! ;)
Ganhei os 10 pts?
Abração, Claudinha
2006-09-17 02:05:22
·
answer #1
·
answered by ☆Kakauzinha☆ 5
·
1⤊
0⤋
Já sabemos como construir uma cadeia de caracteres (String) a partir de outras usando concatenação, representada pelo operador &:
``Banana'' & ``Madura'' = ``BananaMadura''
Vamos agora tratar da operação inversa, ou seja, construir um String que é um ``pedaço'' de outro. Para isso, basta entender que os caracteres em um String podem ser indexados da mesma forma que as posições em um vetor (mas Strings não são apenas vetores de caracteres, pois não possuem tamanho fixo). Por exemplo, o String ``BananaMadura'' pode ser indexado como ilustrado abaixo:
B a n a n a M a d u r a
1 2 3 4 5 6 7 8 9 10 11 12
Para extrair um vetor de outro, usamos a função MID$:
Mid$( , , ).
Alguns exemplos:
str = ``BananaMadura''
str2_7 = Mid$( str, 2, 6 ) 'str1 recebe ``ananaM''
char10 = Mid$( str, 10, 1 ) 'char10 recebe ``u''
Uma importante função é aquela que nos dá o tamanho de um String, Len( ) (do inglês, length = comprimento). Por exemplo:
n = Len(``BananaMadura'') 'n recebe 12
x = Len(``12 34'') 'x recebe 5
Outras vezes, gostaríamos de saber se um caracter extraído de um string representa um número ou não. Neste caso usamos a função IsNumeric. Por exemplo,
OK = IsNumeric(``1'') 'OK é verdadeiro
OK = IsNumeric(``;'') 'OK é falso
OK = IsNumeric(`` '') 'OK é falso
OK = IsNumeric(``x'') 'OK é falso
Vamos ilustrar o uso das funçoes Mid$, Len e IsNumeric construindo uma função que, dado um String, filtra todos os caracteres que não são numéricos. Por exemplo, dado o CPF ``123.456.789-01'', retorna o string ``12345678901'', eliminando toda a pontuação.
Function FiltraAlgarismo(strIn As String) As String
Dim pos As Integer 'posicao no string
Dim tamStr As Integer 'tamanho do string
Dim strOut As String 'string de saída
Dim letraCorr As String 'Letra corrente em strIn
pos = 1
tamStr = Len(strIn)
strOut = ""
Do While pos <= tamStr
letraCorr = Mid$(strIn, pos, 1)
If IsNumeric(letraCorr) Then
strOut = strOut & letraCorr
End If
pos = pos + 1 'próxima posição
Loop
FiltraAlgarismo = strOut
End Function
Esse exemplo transforma, por efeito colateral, um string num vetor de caracteres (com a ressalva que o vetor de caracteres tem que ter tamanho pelo menos igual ao do string).
Sub stringVet(str As String, vet() As Integer)
'Assumimos que o tamanho de vet é
' maior que Len(str)
Dim pos As Integer
Dim strAux As String
strAux = FiltraAlgarismo(str)
pos = 1
Do While pos <= Len(strAux)
vet(pos) = CInt(Mid$(strAux, pos, 1))
pos = pos + 1 'próxima posição
Loop
End Sub
Outro exemplo é a normalização de datas. Neste caso, uma data (dada por um string) do tipo ``3/2/98'' é transformada em ``19980203'', ou seja, uma data do tipo ``Dia/Mes/Ano'' é transformada em Ano1Mes1Dia1, onde Ano1 está com 4 algarismos, Mes1 e Dia1 com dois.
Function FormataData(data As String) As String
'transforma uma data Dia/Mes/Ano em
' um string AnoMesDia onde
Dim ano As String, mes As String, dia As String
Dim pos As Integer
Dim letraCorr As String
'Inicialização
ano = ""
mes = ""
dia = ""
pos = 1
'obtem o dia, procurando pela primeira '/'
letraCorr = Mid$(data, pos, 1)
Do While letraCorr <> "/"
dia = dia & letraCorr
pos = pos + 1 'próxima posição
letraCorr = Mid$(data, pos, 1)
Loop
If Len(dia) = 1 Then
dia = "0" & dia
ElseIf Len(dia) > 2 Or Len(dia) < 1 Then
dia = "00"
End If
'obtem o mes, procurando pela segunda '/'
pos = pos + 1 'vai para a próxima posição
letraCorr = Mid$(data, pos, 1)
Do While letraCorr <> "/"
mes = mes & letraCorr
pos = pos + 1 'próxima posição
letraCorr = Mid$(data, pos, 1)
Loop
If Len(mes) = 1 Then
mes = "0" & mes
ElseIf Len(mes) > 2 Or Len(mes) < 1 Then
mes = "00"
End If
'obtem o ano, varrendo data até o fim
pos = pos + 1 'vai para a próxima posição
letraCorr = Mid$(data, pos, 1)
Do While pos <= Len(data)
ano = ano & letraCorr
pos = pos + 1 'próxima posição
letraCorr = Mid$(data, pos, 1)
Loop
If Len(ano) = 2 Then
ano = "19" & ano
ElseIf Len(ano) <> 4 Then
ano = "0000"
End If
'Retorno
FormataData = ano & mes & dia
End Function
Por fim, temos uma função que verifica se uma data é valida (com alguns errinhos: quais?) que usa FormataData.
Function DataLegal(data As String) As Boolean
Dim ok As Boolean
Dim ano As Integer
Dim mes As Integer
Dim dia As Integer
Dim dataFormatada As String
ok = True
dataFormatada = FormataData(data)
ano = CInt(Mid$(dataFormatada, 1, 4))
mes = CInt(Mid$(dataFormatada, 5, 2))
dia = CInt(Mid$(dataFormatada, 7, 2))
If ano < 1900 Or ano > 2050 Then
ok = False
End If
If mes < 1 Or mes > 12 Then
ok = False
End If
If dia < 1 Or mes > 31 Then
ok = False
End If
'Retorno
DataLegal = ok
End Function
Exercícios
1.
Fazer uma função que recebe um string como parâmetro e retorna um string obtido ao se eliminar os espaços em branco no início e fim do string:
" Bom dia, senhor " deve ser transformado em "Bom dia, senhor"
"Bom dia, senhor " deve ser transformado em "Bom dia, senhor"
" Bom dia, senhor" deve ser transformado em "Bom dia, senhor"
2.
Fazer uma função que codifica um string pelo método ZENIT-POLAR:
Z E N I T
P O L A R
Ou seja, onde aparece um ``Z'' no string de entrada, aparecerá um ``P'' na saída; e, semelhantemente, onde aparece um ``P'' no string de entrada, aparecerá um ``Z'' na saída. Isto deve ocorrer para todos os pares em ZENIT-POLAR, maiúsculas e minúsculas. As outras letras não são alteradas
Por exemplo, o string ``Parabens a voce'' é codificado para ``Zitibols i veco''.
Ao se aplicar duas vezes a transformação, obtém-se o mesmo string, ou seja, a codificação de ``Zitibols i veco'' é ``Parabens a voce''.
3.
Fazer uma função que inverte um string. ``Parabens a voce'' vira ``ecov a snebaraP''.
2006-09-17 09:09:39
·
answer #10
·
answered by oscolombos 2
·
0⤊
0⤋