No C, temos a biblioteca string.h que permite manipular arrays de char (já que string mesmo não existe em C).
Vamos supor esse código aqui:
// Isso dará erro:
char frase[20] = "Isso é uma string";
char copia[20] = *frase;
printf("%s\n", copia);
Por serem arrays, não é possível copiar conteúdos de um array de char para outro. Nesse caso usamos o método strcpy, assim:
char frase[20] = "Isso é uma string";
char copia[20];
strcpy(copia, frase); // Inclua string.h
printf("%s\n", copia);
Para concatenar, fazemos assim, usando o strcat:
char frase[50] = "Isso é uma string";
strcat(frase, " com mais alguma coisa!"); // Inclua string.h
printf("%s\n", frase);
E para retornar a quantidade de caracteres usamos o strlen, assim:
char frase[20] = "Isso é uma string";
int tam = strlen(frase);
printf("Tamanho do array de char: %d\n", tam);
Para ver se uma string está vazia, use a função strlen(), assim:
char* nome = "";
printf("Nome está vazio? %s\n", !strlen(nome) ? "true" : "false");
Podemos usar o strcmp para comparar conteúdos de strings:
char *f1 = "Frase 1";
char *f2 = "Frase 2";
char *resul = !strcmp(f1, f2) ? "iguais" : "diferentes";
printf("As frases são %s.\n", resul);
Se o resultado de strcmp for zero, as strings são iguais, se for menor o conteúdo é menor e se for maior que 0 o conteúdo é maior.
Para encontrar uma palavra numa string, fazemos assim, com o método strstr:
char frase[20] = "Isso é uma string";
char *resul = strstr(frase, "string");
if(resul != NULL) {
printf("A palavra foi encontrada!\n");
}
else {
printf("Não existe essa palavra na string!\n");
}
Para dividir uma string, usamos o método strtok assim:
char frase[20] = "Isso é uma string";
char *divi;
divi = strtok(frase, " ");
while(divi != NULL) {
printf("%s\n", divi);
divi = strtok(NULL, " ");
}
Para inverter, não usamos essa biblioteca, mas um algoritmo, como podemos ver:
char frase[20] = "Isso é uma string";
char invert[20];
int tam = strlen(frase) - 1;
int j = 0;
for(int i = tam; i >= 0; i--) {
invert[j] = frase[i];
j++;
}
invert[j] = '\0'; // Finaliza string
printf("%s\n", invert);
E para eliminar espaços excessivos de uma string, implementamos essa função simples:
char* trim(char *s) {
int i;
while(isspace(*s)) s++;
for(i = strlen(s) - 1; isspace(s[i]); i--);
s[i + 1] = '\0';
return s;
}
E usamos assim:
char frase[20] = "Isso é uma string";
printf("%s\n", trim(frase));
Podemos criar funções com o toupper() para transformar o texto em maiúscula, podemos fazer o mesmo com minúsculas usando tolower(), assim:
// Inclua string.h e ctype.h
char* maiuscula(char* texto);
char* minuscula(char* texto);
int main() {
setlocale(LC_ALL, "portuguese");
char *frase = "Uma Frase";
char *maius, *minus;
printf("%s\n", frase);
maius = maiuscula(frase);
printf("%s\n", maius);
minus = minuscula(frase);
printf("%s\n", minus);
return 0;
}
char* maiuscula(char* texto) {
unsigned long int tam = strlen(texto);
char aux[tam];
for(int i = 0; i < tam; i++) {
aux[i] = toupper(texto[i]);
}
aux[tam] = '\0';
texto = aux;
return texto;
}
char* minuscula(char* texto) {
unsigned long int tam = strlen(texto);
char aux[tam];
for(int i = 0; i < tam; i++) {
aux[i] = tolower(texto[i]);
}
aux[tam] = '\0';
texto = aux;
return texto;
}
Na linguagem C, para conseguirmos acessar o valor de uma variável global, dentro de uma função que possui uma variável local com mesmo nome, devemos usar a instrução extern (Manzano, 2015). Veja no exemplo, que foi necessário criar uma nova variável chamada b
, com um bloco de instruções, que atribui a nova variável o valor externo
de x:
int x = 10;
int main() {
setlocale(LC_ALL, "portuguese");
int x = -1;
int b;
{
extern int x;
b = x;
}
printf("Valor de x: %d\n", x);
printf("Valor de b (x global): %d\n", b);
return 0;
}