Strings

Na linguagem C, uma string é um array de caracteres terminado pelo caractere null (‘\0’).

As strings em C são armazenadas como arrays de caracteres, onde cada caractere é armazenado em um elemento do array, e o caractere null marca o final da string.

Declaração de strings

Declaramos uma string usando um array de caracteres:

char str[50]; //declara uma string com capacidade para 50 caracteres

NOTA: o tamanho do array de caracteres da string deve levar em linha de conta com o caractere null. Se, por exemplo quisermos armazenar a string “ola” num array de caracteres este deve ter uma capacidade de pelo menos 4 caracteres.

Inicialização de strings

Podemos inicializar uma string diretamente:

char str[] = "Bem vindos ao C";

Nesse caso, o compilador irá calcular automaticamente o tamanho da string. O caractere null será colocado automaticamente no final da string.

Também podemos inicializar uma string indiretamente, caratere a caratere:

char str[50];
str[0] = 'O';
str[1] = 'l';
str[2] = 'á';
str[3] = '\0';  //caractere null a terminar a string

Podemos igualmente inicializar a string usando a função strcpy() da biblioteca string.h:

#include <string.h>

int main()
{
    char str[50];
    strcpy(str, "Olá, mundo!");
}

Passagem de strings para funções

Em C, as strings são tratadas como arrays de caracteres. Portanto, podemos passar strings para funções como um array de caracteres:

// Função que imprime uma string
void imprimirString(char str[])
{
    printf("A string passada é: %s\n", str);
}

int main()
{
    char str[] = "Olá, Mundo!";

    imprimirString(str);

    return 0;
}

De notar que ao passarmos a string para a função não necessitamos de passar o seu tamanho dado que as strings em C terminam com o caractere null (\0).

Manipulação de strings

A biblioteca string.h oferece várias funções para manipular strings em C. Algumas das funções mais comuns incluem:

strlen

A função strlen retorna o tamanho de uma string.

Assinatura:

size_t strlen( const char* fonte )

Parâmetro:

fonte: string a determinar o tamanho.

Retorno :

um size_t (longo inteiro sem sinal) com o tamanho da string.

Exemplo:

char *str = "Bom dia";
int tamanho = strlen(str); //strlen retorna 7

strcpy

Copia a string fonte para a string de destino, incluindo o caractere terminal de string

Assinatura:

char* strcpy( char* destino, const char* fonte )

Parâmetros:

destino: string que recebe a cópia da string fonte.

fonte: string que vai ser copiada.

Exemplo:

    char *str1 = "Bom dia";
    char str2[10];
    //copia str1 para str2:
    strcpy(str2, str1);

strcat

Concatena duas strings. A função strcat anexa a string fonte ao final da string destino, e o resultado é a própria string destino com a concatenação de fonte. A função strcat não aloca nova memória para o resultado e assume que a string destino tem espaço suficiente para conter os caracteres de ambas as strings.

Assinatura:

char* strcat( char* destino, const char* fonte )

Parâmetros:

destino e fonte; strings a serem concatenadas.

Retorno:

String com ambas as strings concatenadas.

Exemplo:

    char str1[50] = "Bom dia ";
    puts(str1);
    char *str2 = "e boa semana";
    strcat(str1, str2);
    puts(str1); //output: "Bom dia e boa semana"

strcmp

Compara duas strings.

Assinatura:

int strcmp( const char* str1, const char* str2 )

Parâmetros:

str1: A primeira string a ser comparada.

str2: A segunda string a ser comparada.

Retorno:

A função strcmp compara as duas strings, str1 e str2. Ela retorna um valor inteiro que indica a relação entre as strings da seguinte maneira:

Se str1 for igual a str2, a função retorna 0.

Se str1 for lexicograficamente menor (em ordem alfabética) do que str2, a função retorna um valor negativo.

Se str1 for lexicograficamente maior do que str2, a função retorna um valor positivo.

Exemplo:

    const char str1[] = "maçã";
    const char str2[] = "banana";
    
    int resultado = strcmp(str1, str2);
    
    if (resultado == 0) {
        printf("As strings são iguais.\n");
    } else if (resultado < 0) {
        printf("str1 é menor do que str2.\n");
    } else {
        printf("str1 é maior do que str2.\n");
    }

strchr

A função strchr procura a primeira ocorrência de um caractere numa string.

Assinatura:

char* strchr( const char* str, int caractere)

Parâmetros:

str: A string na qual você deseja procurar o caractere.

caractere: O caractere que você deseja encontrar na string.

Retorno:

Retorna um ponteiro para a primeira ocorrência desse caractere na string. Se o caractere não for encontrado, a função retorna um ponteiro nulo (NULL).

Exemplo:

    const char str[] = "Esta é uma string de exemplo.";
    int caractere = 'é';  // O caractere a ser encontrado

    char *resultado = strchr(str, caractere);

    if (resultado != NULL) {
        printf("O caractere '%c' foi encontrado na posição: %ld\n", caractere, resultado - str);
    } else {
        printf("O caractere '%c' não foi encontrado na string.\n", caractere);
    }

strstr

A função strstr procura a primeira ocorrência de uma substring numa string.

Assinatura:

char* strstr( const char* str, const char* substring)

Parâmetros:

str: A string na qual você deseja procurar a subcadeia.

substring: A substring que você deseja encontrar na string.

Retorno:

Retorna um ponteiro para o início da substring na string. Se a substring não for encontrada, a função retorna um ponteiro nulo (NULL).

Exemplo:

    const char str[] = "Esta é uma string de exemplo.";
    const char subcadeia[] = "exemplo";  // A subcadeia a ser encontrada

    char *resultado = strstr(str, subcadeia);

    if (resultado != NULL) {
        printf("A subcadeia '%s' foi encontrada na posição: %ld\n", subcadeia, resultado - str);
    } else {
        printf("A subcadeia '%s' não foi encontrada na string.\n", subcadeia);
    }