Strings


Caracteres em C

Em C, caracteres são representados pelo tipo de dado char, e seus valores são definidos entre aspas simples. Por exemplo, 'A', '1', '?', '/', '\n', '\t' são todos caracteres válidos.

Exibir caracteres

Para exibir um caractere no terminal, você pode utilizar a função printf com a máscara %c. Veja um exemplo:

#include <stdio.h>
 
int main()
{
  char c = 'A';
  printf("Este é o caractere %c\n", c);
}

Isso resultará na seguinte saída:

Este é o caractere A

Obter caracteres do usuário

Para obter um caractere que o usuário digita, você pode usar a função getchar(). Aqui está um exemplo:

#include <stdio.h>
 
int main()
{
  puts("Digite qualquer letra: ");
  char c = getchar();
  printf("Você digitou %c\n", c);
}

A função puts() é usada para exibir uma string sem formatação e adicionar uma quebra de linha.

Valores numéricos dos caracteres

Em C, cada caractere é associado a um valor numérico com base na tabela ASCII. Por exemplo, o caractere A é representado pelo inteiro 65, de acordo com a tabela ASCII. Isso permite que você realize operações numéricas com caracteres. Aqui está um exemplo:

#include <stdio.h>
 
int main()
{
  char c = 'C';
  printf("Este é o caractere %c\n", c);
  printf("O valor inteiro deste caractere é %d\n", c);
}

Isso resultará na seguinte saída:

Este é o caractere C
O valor inteiro deste caractere é 67

Manipulação e validação de Caracteres

A biblioteca ctype.h em C fornece funções para classificar caracteres e manipular caracteres. Abaixo, explicarei cada função dessa biblioteca:

Funções de classificação de caracteres (Character Classification):

  1. isalnum:

    • Verifica se um caractere é alfanumérico, ou seja, uma letra (maiúscula ou minúscula) ou um dígito.
    • Retorna um valor diferente de zero se o caractere for alfanumérico, caso contrário, retorna zero.
  2. isalpha:

    • Verifica se um caractere é uma letra do alfabeto (maiúscula ou minúscula).
    • Retorna um valor diferente de zero se o caractere for uma letra, caso contrário, retorna zero.
  3. islower:

    • Verifica se um caractere é uma letra minúscula.
    • Retorna um valor diferente de zero se o caractere for minúsculo, caso contrário, retorna zero.
  4. isupper:

    • Verifica se um caractere é uma letra maiúscula.
    • Retorna um valor diferente de zero se o caractere for maiúsculo, caso contrário, retorna zero.
  5. isdigit:

    • Verifica se um caractere é um dígito (0 a 9).
    • Retorna um valor diferente de zero se o caractere for um dígito, caso contrário, retorna zero.
  6. isxdigit:

    • Verifica se um caractere é um dígito hexadecimal (0-9, A-F ou a-f).
    • Retorna um valor diferente de zero se o caractere for um dígito hexadecimal, caso contrário, retorna zero.
  7. iscntrl:

    • Verifica se um caractere é um caractere de controle (por exemplo, caracteres não imprimíveis).
    • Retorna um valor diferente de zero se o caractere for um caractere de controle, caso contrário, retorna zero.
  8. isgraph:

    • Verifica se um caractere é um caractere gráfico (um caractere que tem representação gráfica na tela).
    • Retorna um valor diferente de zero se o caractere for gráfico, caso contrário, retorna zero.
  9. isspace:

    • Verifica se um caractere é um caractere de espaço (por exemplo, espaço em branco, tabulação, quebra de linha).
    • Retorna um valor diferente de zero se o caractere for um caractere de espaço, caso contrário, retorna zero.
  10. isblank (C99):

    • Verifica se um caractere é um caractere de espaço em branco (espaço ou tabulação).
    • Retorna um valor diferente de zero se o caractere for espaço em branco, caso contrário, retorna zero.
  11. isprint:

    • Verifica se um caractere é um caractere imprimível (um caractere que pode ser exibido na tela).
    • Retorna um valor diferente de zero se o caractere for imprimível, caso contrário, retorna zero.
  12. ispunct:

    • Verifica se um caractere é um caractere de pontuação (por exemplo, vírgula, ponto e vírgula).
    • Retorna um valor diferente de zero se o caractere for um caractere de pontuação, caso contrário, retorna zero.

Funções de manipulação de caracteres (Character Manipulation):

  1. tolower:

    • Converte um caractere em minúscula, se possível.
    • Retorna o caractere convertido se for uma letra maiúscula, caso contrário, retorna o mesmo caractere.
  2. toupper:

    • Converte um caractere em maiúscula, se possível.
    • Retorna o caractere convertido se for uma letra minúscula, caso contrário, retorna o mesmo caractere.

Essas funções são úteis para verificar e transformar caracteres em operações de processamento de texto e entrada/saída. Por exemplo, você pode usá-las para validar entradas do usuário, manipular texto em caixa alta ou baixa, e muito mais, tornando-as ferramentas essenciais na manipulação de caracteres em programas C.

Exibir strings sem formatação

Você também pode exibir strings sem formatação usando a função fputs(). Por exemplo:

#include <stdio.h>
 
int main()
{
  fputs("Digite um número: ", stdout);
  char c = getchar();
 
  if (isdigit(c))
  {
    printf("Você digitou o número %c\n", c);
  }
  else
  {
    printf("%c não é um número!\n", c);
  }
}

Isso produzirá a seguinte saída:

Digite um número: 5
Você digitou o número 5

Caracteres em C são fundamentais para lidar com entrada, saída e processamento de dados, e compreender seu funcionamento é essencial para programação em C. Se você tiver mais dúvidas ou precisar de esclarecimentos adicionais, sinta-se à vontade para perguntar.

Strings

Em C, uma string é um conjunto de caracteres tratado como uma única entidade. Por exemplo, "Rua do Engenho, 123", "1000", "(11) 9999-8888", "23/11/1955" são todos exemplos de strings.

Representação de Strings

Na linguagem C, os valores das strings são representados entre aspas duplas, como "Exemplo de string".

É importante destacar que em C, não existe um tipo de dado específico para strings como em algumas outras linguagens. Em vez disso, uma string é representada como um array de caracteres. Para indicar o final de uma string, utiliza-se o caractere especial \0, que é chamado de null character. Por exemplo:

#include <stdio.h>
 
int main()
{
  char palavra[20];
  palavra[0] = 'L';
  palavra[1] = 'e';
  palavra[2] = 'g';
  palavra[3] = 'a';
  palavra[4] = 'l';
  palavra[5] = '\0';
  printf("Palavra: %s\n", palavra);
}

Nesse exemplo, estamos criando uma string “Legal” e usando o caractere \0 para indicar o seu final. A máscara %s é usada na função printf para formatar e exibir a string.

Inicialização de Strings

Existem duas formas comuns de inicializar strings em C:

  1. Utilização da notação de array:

    char nome[] = {'M', 'a', 'r', 'i', 'a', '\0'};
  2. Valor literal:

    char nome[] = "Maria";

A segunda forma é mais simples e amplamente usada, onde a string é inicializada com um valor literal entre as aspas duplas.

Leitura de Strings

A leitura de strings em C pode ser feita com o auxílio da função scanf(), mas essa função lê os caracteres até encontrar o primeiro espaço em branco. Isso significa que ela lê apenas uma palavra por chamada. Aqui está um exemplo:

#include <stdio.h>
 
int main()
{
  char nome[11];
 
  fputs("Digite um nome com 10 letras: ", stdout);
  scanf("%s", nome);
  printf("Nome digitado: %s\n", nome);
}

Se você inserir “Ana Maria”, a saída será:

Digite um nome com 10 letras: Ana Maria
Nome digitado: Ana

Para resolver esse problema e ler strings com espaços, você pode chamar a função scanf() novamente ou melhor usar a função fgets():

#include <stdio.h>
 
int main()
{
  char nome[11];
  char sobrenome[11];
 
  fputs("Digite seu nome e sobrenome: ", stdout);
  scanf("%s", nome);
  scanf("%s", sobrenome);
  printf("Nome: %s\n", nome);
  printf("Sobrenome: %s\n", sobrenome);
}

Alternativamente, podemos usar fgets() para ler a linha inteira, incluindo espaços em branco:

#include <stdio.h>
 
int main()
{
  char nome[50]; // Aumentamos o tamanho para acomodar nomes maiores
 
  fputs("Digite seu nome completo: ", stdout);
  fgets(nome, sizeof(nome), stdin);
  printf("Nome completo: %s\n", nome);
}

A função fgets() lê uma linha inteira (até que o usuário pressione Enter) e armazena na variável nome. O terceiro parâmetro stdin indica a entrada padrão (teclado).

Biblioteca string.h para Manipulação de Strings

A biblioteca string.h em C fornece várias funções para manipulação de strings. Aqui estão algumas das funções mais comuns e suas descrições:

Conversões para e a partir de formatos numéricos:

  1. atof:

    • Converte uma sequência de bytes em uma representação de ponto flutuante (número decimal de ponto flutuante).
    • Retorna o valor convertido como um número de ponto flutuante (float).
  2. atoi, atol, atoll (C99):

    • Convertem uma sequência de bytes em um valor inteiro (número inteiro).
    • atoi retorna um valor int.
    • atol retorna um valor long.
    • atoll retorna um valor long long.
  3. strtol, strtoll (C99):

    • Convertem uma sequência de bytes em um valor inteiro (número inteiro), permitindo controle avançado de base (decimal, hexadecimal, octal, etc.).
    • strtol retorna um valor long.
    • strtoll retorna um valor long long.
  4. strtoul, strtoull (C99):

    • Convertem uma sequência de bytes em um valor inteiro não assinado (número inteiro sem sinal), permitindo controle avançado de base.
    • strtoul retorna um valor unsigned long.
    • strtoull retorna um valor unsigned long long.
  5. strtof, strtod, strtold (C99):

    • Convertem uma sequência de bytes em um valor de ponto flutuante (número decimal de ponto flutuante), permitindo controle avançado de precisão.
    • strtof retorna um valor float.
    • strtod retorna um valor double.
    • strtold retorna um valor long double.
  6. strfromf, strfromd, strfromld (C23):

    • Convertem um valor de ponto flutuante em uma sequência de bytes.
    • Essas funções são usadas para converter números de ponto flutuante em strings.

Manipulação de strings:

  1. strcpy, strcpy_s (C11):

    • Copiam uma string para outra.
    • strcpy não verifica os limites e pode causar estouro de buffer.
    • strcpy_s é uma versão segura que permite especificar o tamanho máximo do buffer de destino.
  2. strncpy, strncpy_s (C11):

    • Copiam uma quantidade específica de caracteres de uma string para outra.
    • strncpy copia um número especificado de caracteres e preenche com nulos se a origem for mais curta.
    • strncpy_s é uma versão segura que permite especificar o tamanho máximo do buffer de destino.
  3. strcat, strcat_s (C11):

    • Concatenam duas strings (anexam uma no final da outra).
    • strcat não verifica os limites e pode causar estouro de buffer.
    • strcat_s é uma versão segura que permite especificar o tamanho máximo do buffer de destino.
  4. strncat, strncat_s (C11):

    • Concatenam uma quantidade específica de caracteres de duas strings.
    • strncat anexa um número especificado de caracteres e adiciona um nulo no final.
    • strncat_s é uma versão segura que permite especificar o tamanho máximo do buffer de destino.
  5. strxfrm:

    • Transforma uma string de forma que strcmp produza o mesmo resultado que strcoll.
    • É usado para fazer comparações de strings sensíveis ao idioma.
  6. strdup (C23):

    • Aloca e cria uma cópia de uma string existente.
    • Essencialmente, duplica uma string.
  7. strndup (C23):

    • Aloca e cria uma cópia de uma string existente com um tamanho máximo especificado.

Exame de strings:

  1. strlen, strnlen_s (C11):

    • Retorna o comprimento de uma string (número de caracteres).
    • strlen não verifica os limites do buffer.
    • strnlen_s é uma versão segura que permite especificar o tamanho máximo.
  2. strcmp:

    • Compara duas strings e retorna um valor inteiro que indica se são iguais ou qual é maior.
  3. strncmp:

    • Compara uma quantidade específica de caracteres de duas strings.
  4. strcoll:

    • Compara duas strings de acordo com as regras de classificação da localidade atual (idioma e região).
  5. strchr:

    • Encontra a primeira ocorrência de um caractere em uma string.
  6. strrchr:

    • Encontra a última ocorrência de um caractere em uma string.
  7. strspn:

    • Retorna o comprimento do segmento inicial máximo que consiste apenas nos caracteres encontrados em outra string.
  8. strcspn:

    • Retorna o comprimento do segmento inicial máximo que consiste apenas nos caracteres que não são encontrados em outra string.
  9. strpbrk:

    • Encontra a primeira localização de qualquer caractere de uma string em outra string.
  10. strstr:

    • Encontra a primeira ocorr

Referências