DEV Community

Gabriel Ferreira
Gabriel Ferreira

Posted on

Um Guia Sobre Strings

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!"
Enter fullscreen mode Exit fullscreen mode

Muito cuidado para não se confundir!

a = "2 + 2"
b = 2 + 2
Enter fullscreen mode Exit fullscreen mode

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"
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

Saída:

"Fulano de Tal"
Enter fullscreen mode Exit fullscreen mode

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))
Enter fullscreen mode Exit fullscreen mode

Saída:

12
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

Saída:

61
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

Saída:

12
Enter fullscreen mode Exit fullscreen mode

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 + "]")
Enter fullscreen mode Exit fullscreen mode

Saída:

[TEXTO]
Enter fullscreen mode Exit fullscreen mode

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 + "]")

Enter fullscreen mode Exit fullscreen mode

Saída:

[    TEXTO]
Enter fullscreen mode Exit fullscreen mode

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 + "]")
Enter fullscreen mode Exit fullscreen mode

Saída:

[TEXTO    ]
Enter fullscreen mode Exit fullscreen mode

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))
Enter fullscreen mode Exit fullscreen mode

Saída:

0
Enter fullscreen mode Exit fullscreen mode

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))
Enter fullscreen mode Exit fullscreen mode

Saída:

4
Enter fullscreen mode Exit fullscreen mode

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))
Enter fullscreen mode Exit fullscreen mode

Saída:

ValueError
Enter fullscreen mode Exit fullscreen mode

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!")
Enter fullscreen mode Exit fullscreen mode

Saída:

encontrado!
Enter fullscreen mode Exit fullscreen mode

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 )
Enter fullscreen mode Exit fullscreen mode

Saída:

true
Enter fullscreen mode Exit fullscreen mode

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 )
Enter fullscreen mode Exit fullscreen mode

Saída:

true
Enter fullscreen mode Exit fullscreen mode

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 )
Enter fullscreen mode Exit fullscreen mode

Saída:

1
Enter fullscreen mode Exit fullscreen mode

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())
Enter fullscreen mode Exit fullscreen mode

Saída:

['Hello', 'world!']
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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(",", " -"))
Enter fullscreen mode Exit fullscreen mode

Saída:

Hello - world!
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

Saída:

"muspi merol"
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

Saída:

"aruturtse"       // quantidade par, todos os elementos são invertidos
"ranoicator"      // quantidade ímpar, o elemento do meio não é alterado
Enter fullscreen mode Exit fullscreen mode

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, ...
Enter fullscreen mode Exit fullscreen mode

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:

  1. case sensitive: Diferencia-se maiúsculas de minúsculas; ou
  2. 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)
Enter fullscreen mode Exit fullscreen mode

Saída:

a = "mundo"
b = "MUNDO"
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

Saída:

a = "mundo"
b = "mundo"
Enter fullscreen mode Exit fullscreen mode

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:


Este guia foi desenvolvido por

Luiz Gustavo
LinkedInGitHubTwitter

Gabriel Ferreira
Dev.to blogLeetCodeGitHub

**Wellder Bernardo**
**Cipriano Jose**

Top comments (0)