<aside>
Conhecimentos necessários:
Variáveis, entrada e saída de dados, estruturas condicionais e estruturas repetitivas
Dados, bases numéricas e memória
</aside>
<aside>
Navegação
</aside>
<string.h>As strings, por serem diferente do resto das variáveis, podem ser mais chatinhas de se usar. Por isso, existe essa biblioteca com comandos que ajudam na manipulação de strings.
Entrega o números de caractere presentes na string como int, contando as letras, espaços e símbolos. Por exemplo:
#include <stdio.h>
#include <string.h>
int main(){
char nome[] = "Joao";
printf("%d", strlen(nome));
return 0;
}
Esse código mostra o número 4. Pois há 4 letras na string. Mas se no lugar de “Joao” fosse “Gustavo Silva.”, ele contaria todas as letras, todos os espaços e até o ponto final, mostrando o número 14.
Como visto anteriormente, é usado para mudar o valor de alguma string:
#include <stdio.h>
#include <string.h>
int main(){
char fraseDoDia[] = "Errar eh humano.";
strcpy(fraseDoDia, "Errar eh comum.")
return 0;
}
Serve para concatenar (adicionar texto na frente). Por exemplo:
#include <stdio.h>
#include <string.h>
int main(){
char shopping[] = "Shopping "; //aqui a variável só guarda "Shopping "
strcat(fraseDoDia, "Center") //aqui ela já guarda "Shopping Center"
return 0;
}
Serve para comparar uma string com outras e retornar um valor de 0 ou 1. Caso sejam iguais, ela retorna 0 (falso). Caso sejam diferentes, ela retorna 1 (verdadeiro). Alguns exemplos:
#include <stdio.h>
#include <string.h>
int main(){
char professor[100];
printf("Digite o nome e sobrenome de seu professor de matemática: ");
fgets(professor, 100, stdin);
if(strcmp(professor, "Gustavo Pereira")) //se forem iguais, retorna falso.
printf("Seu professor não é o Gustavo.");
else
printf("Seu professor é o Gustavo");
}
Podemos fazer dessa forma ou da forma de baixo:
#include <stdio.h>
#include <string.h>
int main(){
char professor[100];
printf("Digite o nome e sobrenome de seu professor de matemática: ");
fgets(professor, 100, stdin);
if(!strcmp(professor, "Gustavo Pereira")) //se forem iguais, retorna falso, mas com o ! ele fica verdadeiro
printf("Seu professor é o Gustavo.");
else
printf("Seu professor não é o Gustavo");
}
Conseguimos acessar um número caractere (char) da seguinte maneira:
nomeDaString[posicao - 1];
Um exemplo:
#include <stdio.h>
int main(){
char time[9] = "Flamengo"; //aqui a string vale "Flamengo"
//'F' representa a primeira posição, mas o código começa a contar do 0
time[0] = 'G'; //aqui eu mudei o primeiro elemento para G
printf("%s", time); //vai mostrar "Glamengo"
}
Agora vem um fato interessante: lembra que o elemento nulo ‘\0’ finaliza a string? Se colocarmos esse elemento no meio, ele vai cortar a string no meio e só mostrar a primeira parte. Um exemplo:
#include <stdio.h>
int main(){
char time[10] = "Sao Paulo"; //aqui a string vale "Sao Paulo"
//o espaço está na quarta posição, mas como o código começa a contar do 0, vamos coniderar o número 3
time[3] = '\\0'; //aqui eu mudei o espaço para o elemento nulo, cortando a string
printf("%s", time); //vai mostrar "Sao"
}
Podemos usar isso para meio que apagar um pedaço da string.
<locale.h>Já percebeu que as strings não suportam acentuação? Isso ocorre porque o C não está no padrão UTF-8, o nosso padrão de escrita que suporta acentos. Para arrumar isso, podemos usar a biblioteca <locale.h> e escrever o seguinte comando:
setlocale(LC_CTYPE, "Portuguese");
Assim, ele aceitará a acentuação corretamente. Por exemplo:
#include <stdio.h>
#include <locale.h>
int main(){
setlocale(LC_CTYPE, "Portuguese");
printf("A acentuação desse texto aparecerá corretamente.");
}
Caso não funcione, você também pode tentar escrever:
setlocale(LC_CTYPE, "pt_BR.UTF-8");
Podemos configurar para um texto de 4 letras ocupar o mesmo espaço de um de 10, ou configurar para um float ou double mostrar apenas 2 casas decimais (ou 15 casas decimais), tudo isso dentro do printf, da seguinte maneira
Dentro dos especificadores de formatos (depois do símbolo de porcentagem e antes da letra) você pode colocar um número, que será a quantidade de espaços que tal variável ocupará. Se for positivo, os espaços serão inseridos à esquerda, mas se for negativo, os espaços serão inseridos à direita. Por exemplo:
#include <stdio.h>
int main() {
char str[] = "cavalo";
printf("|%-10s|", str);
return 0;
}
Saída: |cavalo |
#include <stdio.h>
int main() {
char str[] = "cavalo";
printf("|%10s|", str);
return 0;
}
Saída: | cavalo|
Também podemos usar para formatar números decimais. Para isso, basta informar um ponto e a quantidade de números depois da vírgula. Um exemplo:
#include <stdio.h>
int main() {
double pi = 3.141592653589;
printf("|%.3lf|", pi);
return 0;
}
Saída: |3.142|
#include <stdio.h>
int main() {
double pi = 3.141592653589;
printf("|%.10lf|", pi);
return 0;
}
Saída: |3.1415926536|
#include <stdio.h>
int main() {
double pi = 3.141592653589;
printf("|%20.10lf|", pi);
return 0;
}
Saída: | 3.1415926536|
#include <stdio.h>
int main() {
double pi = 3.141592653589;
printf("|%-20.10lf|", pi);
return 0;
}
Saída: |3.1415926536 |