Introdução
Strings são muito importantes e fazem parte do dia a dia de qualquer programador. Neste guia explicaremos alguns conceitos básicos que envolvem essas estruturas.
Este artigo é parte de um trabalho realizado por alunos da disciplina de Estruturas de Dados Básicas I do curso de Bacharelado em Técnologia da Informação pela Universidade Federal do Rio Grande do Norte.
Nota: Os exemplos estão em pseudo-código e python.
Table of Contents
O que são Strings?
As Strings são sequências ordenadas de caracteres. Muito parecidas com os arrays, são exclusivas para texto, logo só armazenam caracteres.
Em algumas linguagens, como Java e Python, as strings são tipos imutavéis, ou seja, uma vez declaradas não poderão ser alteradas. Não consideraremos isso neste tutorial mas recomendados que você mantenha isso em mente.
Sugerimos que leia sobre o assunto na documentação oficial da sua linguagem de escolha.
Para inicializar uma string devemos usar áspas duplas.
str = "Ola, mundo!"
Muito cuidado para não se confundir!
a = "2 + 2"
b = 2 + 2
O valor de a
é o texto "2 + 2", já o valor de b
é o número 4, resultado da adição 2 + 2
.
Como elas funcionam?
Como nos arrays, as strings também possuem um valor de índice que representa cada elemento, ou caractere.
Considere o trecho:
hello = "hello world"
Temos que:
índice | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|---|
caractere | 'h' | 'e' | 'l' | 'l' | 'o' | ' ' | 'w' | 'o' | 'r' | 'l' | 'd' |
Dessa maneira o elemento hello[0]
é a letra 'h', hello[5]
é um espaço em branco, hello[8]
é a letra 'r' e assim por diante.
O que podemos fazer com Strings?
Para trabalhar com strings serão necessárias operações especícas. A seguir explicaremos alguns
dos métodos e funções mais importantes.
Lembre-se que cada linguagem tem sua própria sintaxe e maneira de aplicar cada uma dessas operações.
Concatenação
O termo concatenar significa conectar algo a uma sequência, logo concatenar strings significa liga-las uma após a outra, resultando em uma única string. Observe o exemplo a seguir:
nome = "Fulano"
sobrenome = "de Tal"
nomeCompleto = nome + ' ' + sobrenome
print(nomeCompleto)
Saída:
"Fulano de Tal"
Aqui representamos a operação como uma soma de strings, onde o último caractere da primeira string será seguido pelo primeiro caractere da segunda string e assim por diante.
Perceba que se fizermos nomeCompleto = nome + sobrenome
teremos como resultado uma string de valor "Fulanode Tal"
Tamanho de uma string
A prática de encontrar o tamanho/comprimento de uma string é muito comum na programação, frequentemente nos deparamos com algum problema que para ser resolvido devemos saber o comprimento total da string para percorrê-la, por exemplo. Sob essa ótica, a linguagem python tem a função interna "len" que retorna o tamanho da string.
Exemplo:
str = "Hello world!"
print(len(str))
Saída:
12
Como resultado, temos o valor 12. Entretanto, é possível observar que embora só exista 11 letras, o resultado apontou um elemento a mais, esse elemento corresponde ao "espaço" entre as letras "o e w", que para a função significa um caractere especial.
MÉTODO 2:
Podemos encontrar o tamanho da string em bytes, usando a biblioteca de funções "sys", através do método “getsizeof”, da seguinte forma:
Exemplo:
import sys
texto = "Hello World!"
res = sys.getsizeof(texto)
print(res)
Saída:
61
O resultado será 61, que corresponde ao tamanho em bytes da string.
MÉTODO 3:
Embora exista todas essas funções, é possível encontrar o comprimento/tamanho de forma manual, segue abaixo um exemplo:
Criamos uma estrutura de repetição, um “for”, por exemplo, que percorre cada posição da string, até o seu último elemento "\0", incrementando uma variável contadora. Ao final, o resultado da variável contadora será o tamanho/comprimento da string.
Exemplo:
x = 'Hello World!'
length = 0
for i in x:
length += 1
print(length)
Saída:
12
Aparar uma string
Remover determinados trechos ou caracteres especiais como espaços ou hífens, por exemplo, é uma prática bem comum na manipulação de strings. Sob essa ótica, a linguagem python tem os métodos strip, rstrip e lstrip que podem ser usados para remover espaços em branco antes e depois na string.
strip(): retorna uma nova string removendo todos os espaços em branco iniciais e finais, incluindo tabulações "\t".
Exemplo:
stTeste = " TEXTO "
stTesteTrim = stTeste.strip()
print("[" + stTesteTrim + "]")
Saída:
[TEXTO]
rstrip(): tem o comportamento semelhante ao “strip”, entretanto, só remove os espaços em branco à direita da string.
Exemplo:
stTeste = " TEXTO "
stTesteTrim = stTeste.rstrip()
print("[" + stTesteTrim + "]")
Saída:
[ TEXTO]
lstrip(): atua de forma similar ao “rstrip”, porém, só remove os espaços em branco à esquerda da string.
Exemplo:
stTeste = " TEXTO "
stTesteTrim = stTeste.lstrip()
print("[" + stTesteTrim + "]")
Saída:
[TEXTO ]
Encontrar substrings/caracteres
De modo geral, uma substring é uma string dentro de outra string, na vida real, por exemplo, podemos destacar uma palavra dentro de uma frase, ou até mesmo os prefixos e sufixos que formam as palavras. Na linguagem python podemos fazer algumas operações com as substrings.
MÉTODO 1:
find(): o método "find" retorna o índice do primeiro caracter da substring dentro da string, caso a substring não exista ele retorna "-1".
Exemplo:
substring = "Hello"
string = "Hello world!"
print(string.find(substring))
Saída:
0
O resultado é "0", que corresponde ao índice inicial da substring na string.
MÉTODO 2:
rfind(): podemos usar também o método “rfind”, que retorna o último índice da substring na string.
Exemplo:
substring = "hello"
string = "hello world"
print(string.rfind(substring))
Saída:
4
MÉTODO 3:
index(): Além das funções "find e rfind", também podemos usar o método "index", que funciona de forma semelhante ao método "find", todavia quando a substring não é encontrada o método retorna "ValueError".
Exemplo:
substring = "z"
string = "Hello world"
print(string.index(substring))
Saída:
ValueError
MÉTODO 4:
Operador in: Podemos usar também o operador "in" que verifica se o operando à esquerda está contido na lista/string à direita.
Exemplo:
str = "Hello world!"
if 'Hello' in str:
print("encontrado!")
Saída:
encontrado!
MÉTODO 5:
endswith(): O método "endswhith" verifica se a substring está no final da string, caso esteja essa função retorna "true", caso contrário retorna "false".
Exemplo:
str = "Hello world"
subs="world"
str.startswith( subs )
Saída:
true
MÉTODO 6:
startswith(): É semelhante ao "endswhith", entretanto verifica se a substring está no início da string.
Exemplo:
str = "Hello world"
subs = "Hello"
str.startswith( subs )
Saída:
true
MÉTODO 7:
count(): Com o método "count" é possível contar a quantidade de incidências da substring na string.
Exemplo:
str = "Hello world"
subs = "Hello"
str.count( subs )
Saída:
1
Outras operações:
splint(): Além de encontrar ou contar substrings, é possível criar uma lista de substrings a partir de uma string, usando a função "split".
Exemplo:
string = "Hello world!"
print(string.split())
Saída:
['Hello', 'world!']
Substituir substrings/caracteres
O método replace é utilizado para substituir um ou mais trechos em uma string, sendo o tipo string imutável em python, essa função retorna uma nova string, dada a modificação proposta. Esse método tem 3 parâmetros, dois obrigatórios e um opcional, que auxiliam na forma de substituição.
Exemplo de uso com parâmetros:
string.replace(valorvelho, valornovo, contador)
O parâmetro "valorvelho" corresponde ao valor original que será substituído ao final do processo.
O parâmetro "valornovo" corresponde ao novo valor que será inserido no lugar do "valorvelho".
O parâmetro contador corresponde a quantas vezes o processo de substituição vai ocorrer. Esse parâmetro é opcional, caso não seja inserido o método substituirá todas as ocorrências do "valorvelho" encontrados na string, pelo "valornovo".
Exemplo:
string= "Hello, world!"
print(string.replace(",", " -"))
Saída:
Hello - world!
Inverter e Rotacionar
Seguindo uma simples ideia, inversão (ou rotação) é a mudança na ordenação dos caracteres de uma string, onde o primeiro passa a ser o último, o segundo se torna o penúltimo e assim por diante. Tomando como exemplo uma string de 10 caracteres, a posição 0 troca com a 9, a posição 1 troca com a 8 e assim por diante.
Considere a função reverse() que recebe uma string e retorna sua inversão.
a = "lorem ipsum"
b = reverse(a)
print(b)
Saída:
"muspi merol"
A ideia das trocas pode ser analisada perante a quantidade de índices da string. Se a quantidade for par, as trocas ocorrerão de acordo com seu equivalente na outra extremidade, se a quantidade for ímpar não ocorre alteração no elemento central.
Exemplos:
a = "estrutura"
b = "rotacionar"
c = reverse(a)
d = reverse(b)
print(c)
print(d)
Saída:
"aruturtse" // quantidade par, todos os elementos são invertidos
"ranoicator" // quantidade ímpar, o elemento do meio não é alterado
Subsequências
Subsequências são strings formadas a partir de qualquer combinação de caracteres da string original.
Com isso, combinações de elementos de uma string que podem ser concatenados um a um, dois a dois, em diante, até n, onde esse n é o tamanho da string.
Considerando a palavra "dados", podemos ter as seguintes subsequências:
d, a, d, o, s, ..., da, dd, do, ..., dad, dao, das, ..., dado, dads, ..., dados, sodads, ...
Não confunda: Substrings são subsequências da string original mas nem toda subsequência é uma substring. Isso acontece porque as subsequências não necessariamente seguem a ordenação original da string.
Comparar
Dizemos que uma string é igual a outra quando seus caracteres são iguais e possuem a mesma ordenação. polvo
é diferente de povo
.
A partir disso, temos dois possíveis cenários para nossas comparações:
- case sensitive: Diferencia-se maiúsculas de minúsculas; ou
- case insensitive: Não se diferencia maiúsculas de minúsculas.
Uma comparação comum será sempre case sensitive. Dessa forma, se quisermos comparar strings sem considerar maiúsculas e minúsculas, precisaremos considerar seus caracteres todos com o mesmo "case" , por assim dizer.
Para isso, é necessário operar em todos os elementos da string, passando cada um deles para o caso desejado.
a = "mundo"
b = "MUNDO"
// a != b
print("a = ", a)
print("b = ", b)
Saída:
a = "mundo"
b = "MUNDO"
Temos que transformar b
para que fique somente em minúsculas ou à
para maiúsculas. Considere uma função lower, onde lower('A') irá retornar 'a'.
n = size(b) // n = 5
for (i = 0; while i < n) {
b[i] = lower(b[i])
}
// a == b
print("a = ", a)
print("b = ", b)
Saída:
a = "mundo"
b = "mundo"
Conclusão
Strings são de fato estruturas muito úteis no nosso dia a dia. Seu uso é essencial em bancos de dados, ferramentas de busca (como o grep, ), criação e validação de senhas, entre outras situações. Se quiser saber mais sobre as Strings acessse os links em nossas referências.
Referências:
- Complete Guide on Strings With Interview Question
- Encontre um caractere em uma string em Python
- Substrings em Python – como dividir uma string
- Como procurar palavras em uma string com Python (substring)
- Python replace: substituindo substrings em uma string!
Top comments (0)