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):
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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.
-
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):
-
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.
-
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:
-
Utilização da notação de array:
char nome[] = {'M', 'a', 'r', 'i', 'a', '\0'};
-
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:
-
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
).
-
atoi, atol, atoll (C99):
- Convertem uma sequência de bytes em um valor inteiro (número inteiro).
atoi
retorna um valorint
.atol
retorna um valorlong
.atoll
retorna um valorlong long
.
-
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 valorlong
.strtoll
retorna um valorlong long
.
-
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 valorunsigned long
.strtoull
retorna um valorunsigned long long
.
-
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 valorfloat
.strtod
retorna um valordouble
.strtold
retorna um valorlong double
.
-
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:
-
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.
-
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.
-
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.
-
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.
-
strxfrm:
- Transforma uma string de forma que
strcmp
produza o mesmo resultado questrcoll
. - É usado para fazer comparações de strings sensíveis ao idioma.
- Transforma uma string de forma que
-
strdup (C23):
- Aloca e cria uma cópia de uma string existente.
- Essencialmente, duplica uma string.
-
strndup (C23):
- Aloca e cria uma cópia de uma string existente com um tamanho máximo especificado.
Exame de strings:
-
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.
-
strcmp:
- Compara duas strings e retorna um valor inteiro que indica se são iguais ou qual é maior.
-
strncmp:
- Compara uma quantidade específica de caracteres de duas strings.
-
strcoll:
- Compara duas strings de acordo com as regras de classificação da localidade atual (idioma e região).
-
strchr:
- Encontra a primeira ocorrência de um caractere em uma string.
-
strrchr:
- Encontra a última ocorrência de um caractere em uma string.
-
strspn:
- Retorna o comprimento do segmento inicial máximo que consiste apenas nos caracteres encontrados em outra string.
-
strcspn:
- Retorna o comprimento do segmento inicial máximo que consiste apenas nos caracteres que não são encontrados em outra string.
-
strpbrk:
- Encontra a primeira localização de qualquer caractere de uma string em outra string.
-
strstr:
- Encontra a primeira ocorr