Manipulação de Strings na Linguagem C

Strings em C

Em C, uma string é uma sequência de caracteres terminada pelo caractere nulo '\0'. Elas podem ser representadas como constantes literais, arrays de caracteres ou ponteiros para caracteres.

Declaração de Strings

Constantes de string são literais entre aspas duplas. O compilador insere automaticamente o terminador '\0'. Exemplo:

char minhaStr[] = "aa" "bb" "cc"; // Equivale a "aabbcc"

Essas constantes residem em regiões de memória estáticas.

Arrays de Caracteres

Ao definir um array para uma string, o tamanho deve acomodar o '\0'. Se o tamanho não for especificado, o terminador deve ser incluído explicitamente:

char saudacao[40] = "Olá, mundo!"; // Espaço para '\0' implícito
char manual[] = {'x', 'y', '\0'}; // Terminador explícito necessário

Sem o '\0', o array não é tratado como string completa.

Ponteiros para Caracteres

Strings podem ser apontadas por ponteiros:

char *mensagem = "Teste"; // Armazenada em memória constante

Tentativas de modificação direta como *(mensagem+0) = 't'; causam erro, pois a string literal é imutável.

Diferença entre arrays e ponteiros: nomes de arrays são endereços constantes (não incrementáveis com ++), enquanto ponteiros são variáveis (permitem ++mensagem).

Funções de String do <string.h>

A biblioteca padrão oferece funções seguras e comuns para manipulação. Versões seguras (sufixo _s) adicionam parâmetros de tamanho.

Cópia e Concatenação

char destino[25];
strcpy_s(destino, sizeof(destino), "origem"); // Cópia completa
strncpy_s(destino, sizeof(destino), "origem", 3); // Copia até 3 caracteres

Concatenação controlada:

char buffer[50] = "Início";
strcat_s(buffer, sizeof(buffer), " Fim"); // Anexa limitando tamanho total

strncat_s permite especificar quantos caracteres anexar.

Comprimento e Comparação

int len = strlen(texto); // Assume '\0' no final
int len_seguro = strnlen(texto, 10); // Limita busca a 10 posições

Comparação lexicográfica:

int cmp = strcmp(a, b); // 0 se iguais, negativo/positivo caso contrário
int cmp_parcial = strncmp(a, b, 4); // Compara primeiros 4 caracteres

Busca em Strings

Localizar caracteres ou substrings:

char *ptr_char = strchr(texto, 'a'); // Primeira ocorrência
char *ptr_sub = strstr(texto, "abc"); // Substring

strpbrk busca qualquer caractere de um conjunto:

char *intersecao = strpbrk(str1, "xyz");

Análise de preifxos com conjuntos de caracteres:

int prefixo_aceito = strspn(str1, "aeiou"); // Tamanho do prefixo de vogais
int prefixo_invalido = strcspn(str1, "aeiou"); // Posição da primeira vogal

Funções de Conversão do <stdlib.h>

Conversões de string para tipos numéricos:

char *final;
double val_double = strtod("  -3.14xyz", &final); // Ignora espaços iniciais

strtol suporta bases de 2 a 36 (base 0 auto-detecta):

char *restante;
long val_long = strtol("0101", &restante, 2); // Base binária

Funções simples como atoi convertem sem detalhes de parada:

int val_int = atoi("12345");

Tags: C Strings string-h stdlib-h manipulação de strings

Publicado em 6-18 17:00