Linguagem C Básico Aula 10: Manipulação básica de Strings

 Imagem meramente ilustrativa

Relembrando

    Diferente de outras linguagens como o Java e o C++, vimos que a linguagem C não possui um tipo de dados conhecido como String ou cadeia de caracteres. Quando desejamos armazenar Strings em variáveis precisamos criar um array unidimensional do tipo char. Também vimos que cadeia de caracteres passadas entre "aspas" para funções como o printf() são chamadas de literal string. Exemplo:

  1. #include<stdio.h>
  2. int main () {
  3.     char nome[]="Julio";
  4.   printf("Vou imprimir seu nome:");
  5.     printf("%s",nome);
  6. }

    No exemplo acima estamos criando um array unidimensional do tipo char chamado nome, iniciando seu conteúdo com o literal "Julio" e imprimindo ele na tela com a função printf() e o especificador de formato "%s". Relembrou?

Aprofundando os conhecimentos

    Uma confusão muito comum do estudante é confundir uma informação char 'x' e com uma literal string "x" de caractere único. Aparentemente possuem o mesmo conteúdo, mas são dados diferentes e de tamanhos diferentes. O 'x' possui apenas um byte, mas "x" possui dois: Um byte para a letra e outro para o byte nulo que toda string possui em seu final.

    Para entender esse diferença vamos usar um pequeno código com a função sizeof(variável) que comentamos anteriormente que serve para verificar o tamanho de uma variável. No caso de arrays unidimensionais é necessário dividir o seu resultado pelo sizeof do tipo da variável.

  1. #include<stdio.h>
  2. int main () {
  3.     char a='x';
  4.     char b[]="x";
  5.     printf("Tamanho de a: %lu",sizeof(a)/sizeof(char));
  6.     printf("\nTamanho de b: %lu",sizeof(b)/sizeof(char));
  7.     return 0;
  8. }

Entrando com dados

    Para entrar com dados em uma variável de string você pode utilizar o scanf() e o especificador de formato "%s". Exemplo:

  1. #include<stdio.h>
  2. int main () {
  3.     char nome[30];
  4.     printf("Digite seu nome: ");
  5.     scanf("%s",nome);
  6.     printf("Seu nome é: %s",nome);
  7.     return 0;
  8. }

Comandos deprecated

    Em alguns exemplos pela internet o estudante encontrará códigos utilizando a função gets() para entrada de dados em variáveis. No entanto não é recomendável o uso dessa função, uma vez que por razões de segurança ela é considerada deprecated, isto é, obsoleta. Exemplo:

  1. #include<stdio.h>

  2. int main(){
  3.     char nome[30];
  4.     printf("Digite seu nome: ");
  5.     gets(nome);     
  6.     printf("Seu Nome é: ");
  7.     puts(nome);    
  8.     return 0;
  9. }

    Já a função puts() pode ser usada como alternativa ao printf() porém não usa a especificação de formatos.

Manipulando strings

    Existem funções que permitem a manipulação de strings e conhecê-las pode ser interessante para controlar a saída de informações em display. Para seu uso é necessário incluir o arquivo de cabeçalho com a biblioteca para manipulação de strings (string.h). Vejamos aqui alguns exemplos básicos:

  1. #include<stdio.h>
  2. #include<string.h>
  3. int main () {
  4.     char nome[30]="julio";
  5.     printf("Nome: %s",nome);
  6.     strcat(nome," ribeiro");
  7.     printf("\nNome concatenado: %s",nome);
  8.     printf("\nQuantas letras tem o nome: %ld",strlen(nome));
  9.     printf("\nPegando o sobrenome: %s",strchr(nome, ' '));
  10.     return 0;
  11. }

    Na linha 6 a função strcat() esta pegando uma variável string e concatenando ela com a string " ribeiro" resultando em "julio ribeiro". Já na linha 8 strlen() resulta no tamanho da string contendo o meu nome, isto é, 13 caracteres contando o espaço.

    Por último na linha 9 estamos pedindo para strchr() localizar um espaço em branco no meu nome e pegando o que sobra da string depois dele, isto é, o meu sobre nome. 

Manipulando caractere por caractere

    Alguns recursos também são oferecidos pela biblioteca ctype.h. Nesse caso a manipulação da string deverá ser feita caractere por caracter. Veja um exemplo de como fazer a string ficar em maiúsculo com a função toupper() e em minúsculo com a função tolower():

  1. #include <stdio.h>
  2. #include <ctype.h>
  3. int main() 
  4. {
  5.     char nome[] = "julio ribeiro";
  6.     for (int i = 0; nome[i] != '\0'; i++) 
  7.     {
  8.         nome[i] = toupper(nome[i]);
  9.     }
  10.     printf("Em maiúsculo: %s\n", nome);
  11.     for (int i = 0; nome[i] != '\0'; i++) 
  12.     {
  13.         nome[i] = tolower(nome[i]);
  14.     }
  15.     printf("Em minúsculo: %s\n", nome);
  16.     return 0;
  17. }

    Repare que nesse exemplo eu usei como condição para interromper o for a expressão nome[i] != '\0' que significa enquanto o elemento da matriz nome ser diferente de \0, isto é, não ser o final da string.

    Esses foram apenas alguns exemplos. Existem várias outras funções, mas o estudante tem que ficar atento, pois muito material na internet oferece exemplos com funções que só funcionam em alguns compiladores e em sistemas operacionais específicos.


Próxima Aula                                                                                                                        Aula Anterior

Referências

DAMAS, L. Linguagem C. Rio de Janeiro: LTC Editora, 2007.

GBD ONLINE. C for Beginners. Disponível em: <https://learn.onlinegdb.com/c_for_beginners> Acesso em 05 ago. 2024.

GBD ONLINE. C Programming Examples Disponível em: <https://learn.onlinegdb.com/c_program_examples> Acesso em 05 ago. 2024.

W3SCHOOLS. C Tutorial. Disponível em: <https://www.w3schools.com/c/index.php> Acesso em 05 ago. 2024.