<aside>

Conhecimentos necessários:

Variáveis, entrada e saída de dados, estruturas condicionais e estruturas repetitivas

Dados, bases numéricas e memória

Técnicas de programação

</aside>

<aside>

Navegação

</aside>

Biblioteca <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.

strlen

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.

strcpy

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;
}

strcat

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;
}

strcmp

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");
}

Modificação de um caractere da string

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.

Biblioteca <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");

Formatação

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 |