Ir para o conteúdo

CCT-UFCA/Ciência da Computação/Introdução à Programação/Manipulando Cadeia de Caracteres

De Wikiversidade

Manipulando Cadeia de Caracteres

[editar | editar código]

Em C, uma cadeia de caracteres (ou string) é, na verdade, uma sequência de valores do tipo char, que termina obrigatoriamente com o caractere especial '\0' (nulo). Esse caractere indica ao compilador onde a string se encerra. Sem ele, o programa não consegue identificar corretamente o fim da sequência, o que pode gerar comportamentos inesperados, como leitura de lixo na memória ou até erros de execução.

Declaração de Strings

[editar | editar código]

Para trabalhar com uma string em C, declaramos um vetor do tipo char, especificando quantos caracteres ela poderá armazenar. Por exemplo:

char nome[20];

Aqui, o vetor nome pode receber até 19 caracteres úteis, pois o último espaço será ocupado automaticamente pelo caractere nulo (\0). Também é possível inicializar diretamente:

char saudacao[] = "Olá Mundo!";

Nesse caso, o compilador conta automaticamente o tamanho necessário para armazenar os caracteres 'O', 'l', 'á', ' ', 'M', 'u', 'n', 'd', 'o', '!' e o caractere nulo '\0', resultando em um vetor de tamanho 11.

Importante: sempre que criamos uma string com aspas duplas ("Texto"), o compilador automaticamente adiciona o '\0' no final.

Diferença entre array de caracteres e string

[editar | editar código]

Tecnicamente, em C, uma string é um array de caracteres terminado em \0. Portanto, nem todo array de char é necessariamente uma string, a não ser que esteja corretamente terminado com o caractere nulo. Se esquecer de garantir isso, funções que trabalham com strings podem acessar áreas inválidas de memória.

Entrada e saída de strings

[editar | editar código]

Usando scanf

[editar | editar código]

O scanf permite ler strings, mas possui uma limitação importante: ele interrompe a leitura quando encontra o primeiro espaço, tabulação ou quebra de linha.

Exemplo:

char nome[20];
scanf("%s", nome);

Essa é uma alternativa para realizar a leitura de strings considerando espaços em branco. No entanto, não é um formato de leitura muito adequado para ser usado.

char nome[20];
scanf("%[^\n]s", nome);

Usando fgets

[editar | editar código]

A função fgets é mais segura para ler strings, pois permite capturar uma linha inteira, incluindo espaços.

Exemplo:

char nome[20];
fgets(nome, 20, stdin);

Por padrão, fgets armazena também o caractere de quebra de linha (\n) quando há espaço no buffer.

  1. str: Ponteiro para o buffer de caracteres onde a string lida será armazenada.
  2. n: Número máximo de caracteres a serem lidos, incluindo o caractere nulo final (\0).
  3. stream: Ponteiro para o fluxo de entrada, que pode ser um arquivo aberto ou stdin (entrada padrão).

Saída com printf

[editar | editar código]

Imprimir uma string é simples:

printf("Seu nome é: %s\n", nome);

Como visto em Introdução à Programação/Entrada e Saída, o especificador %s indica que será impressa uma string.

Operações comuns com strings

[editar | editar código]

A linguagem C oferece, através da biblioteca padrão <string.h>, diversas funções para manipular strings. Essas funções são fundamentais, pois C não tem operadores nativos (como + para concatenar) que funcionem diretamente com strings.

Principais operações:

Verificar o tamanho - strlen()

[editar | editar código]

Retorna o número de caracteres da string, sem contar o caractere nulo.

Exemplo:

int tamanho = strlen(nome);
printf("Tamanho: %d\n", tamanho);

Copiar uma string - strcpy()

[editar | editar código]

Copia uma string para outra. O destino deve ter espaço suficiente para armazenar o conteúdo.

Exemplo:

char string_copia[50];
strcpy(string_copia, string_real);

⚠️ Atenção: strcpy não faz verificação de limite. Se a string de origem for maior que o espaço disponível no destino, ocorre estouro de buffer, podendo causar falhas no programa. Por isso, uma alternativa mais segura é strncpy():

strncpy(string_copia, string_real, sizeof(string_copia) - 1);
string_copia[sizeof(string_copia) - 1] = '\0';

A segunda linha garante que o último caractere será o fim da string com '\0'.

Concatenar strings - strcat()

[editar | editar código]

Adiciona o conteúdo de uma string ao final de outra.

Exemplo:

char saudacao[50] = "Olá, ";
strcat(saudacao, nome);
printf("%s\n", saudacao);

Comparar strings - strcmp()

[editar | editar código]

Permite comparar duas strings caractere a caractere. Intuitivamente pensamos em fazer assim como fazemos com inteiros, comparar strings com ==, no entanto, isso não faz a comparação entre os caracteres das duas strings. A comparação correta entre strings em C pode ser feita da seguinte forma:

if (strcmp(nome, "Marcos") == 0) {
    printf("Nome correto!\n");
} else {
    printf("Nome diferente.\n");
}

O retorno de strcmp é:

  1. 0: strings são iguais
  2. < 0: a primeira string é lexicograficamente menor
  3. > 0: a primeira string é maior

Procurar um caractere - strchr()

[editar | editar código]

Busca a primeira ocorrência de um caractere dentro da string.

Exemplo:

char *ptr = strchr(nome, 'a');
if (ptr != NULL) {
    printf("Encontrou o 'a' na posição: %ld\n", ptr - nome);
}

Procurar uma substring - strstr()

[editar | editar código]

Procura uma string dentro de outra.

Exemplo:

char *ptr = strstr(nome, "Silva");
if (ptr != NULL) {
    printf("Sobrenome encontrado.\n");
}

Conclusão

[editar | editar código]

Trabalhar com strings em C é um exercício essencial para entender como a linguagem lida com memória, ponteiros e estruturas de dados mais primitivas. Diferente de linguagens de alto nível, C obriga o programador a pensar no tamanho dos dados, na terminação das strings e na correta manipulação de arrays. Apesar de ser mais trabalhoso, esse controle também permite criar programas mais performáticos e eficientes.