Aprenda C

  • Página Inicial
  • Contato!
  • Tudo sobre C Parte 1!
  • Tudo sobre C Parte 2!
  • Tudo sobre C Parte 3!
  • Tudo sobre C Parte 4!
  • Tudo sobre C Parte 5!
  • Tudo sobre C Parte 6!
  • Tudo sobre C Parte 7!
  • Tudo sobre C Parte 8!
  • Tudo sobre C Parte 9!
  • Tudo sobre C Parte 9

    Manipulando Strings

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

    Variável Global e Local com Mesmo Nome

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