Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
Próxima revisão | Revisão anterior | ||
c:strings [2023/08/01 17:16] – criada maziero | c:strings [2023/08/24 18:28] (atual) – [Declaração] maziero | ||
---|---|---|---|
Linha 1: | Linha 1: | ||
+ | ====== Strings ====== | ||
+ | |||
+ | {{ progc_strings.mkv |Video desta aula}} | ||
+ | |||
+ | Uma string é uma sequência de caracteres que permite representar nomes, endereços e outras informações textuais. | ||
+ | |||
+ | ===== Declaração ===== | ||
+ | |||
+ | Em C, strings são implementadas como vetores de caracteres (tipo '' | ||
+ | |||
+ | Exemplos: | ||
+ | |||
+ | <code c> | ||
+ | |||
+ | // declara string variável com até 99 caracteres (mais o \0) | ||
+ | char nome[100] ; | ||
+ | |||
+ | // declara string constante (com o \0 no final) | ||
+ | char *profissao = " | ||
+ | |||
+ | // declara ponteiro para uma string (não aloca espaço para ela) | ||
+ | char *endereco ; | ||
+ | |||
+ | // ou | ||
+ | char endereco[] ; | ||
+ | |||
+ | // ponteiro aponta para string constante | ||
+ | endereco = "Rua da Batata, 1000" ; | ||
+ | </ | ||
+ | |||
+ | Deve-se observar que uma string é um **vetor de caracteres**, | ||
+ | |||
+ | <code c> | ||
+ | char codigo[] | ||
+ | char codigo[] | ||
+ | </ | ||
+ | |||
+ | A visão da string como vetor permite o acesso aos seus caracteres individuais. O código abaixo converte uma string em maiúsculas, | ||
+ | |||
+ | <code c> | ||
+ | i = 0 ; | ||
+ | while (str[i] != ' | ||
+ | { | ||
+ | if (str[i] >= ' | ||
+ | str[i] -= 32 ; // converte em letra maiúscula | ||
+ | i++ ; | ||
+ | } | ||
+ | |||
+ | // ou, usando strlen() | ||
+ | for (i = 0; i < strlen (str); i++) // varre todos os caracteres | ||
+ | if (str[i] >= ' | ||
+ | str[i] -= 32 ; // converte em letra maiúscula | ||
+ | </ | ||
+ | |||
+ | <note important> | ||
+ | Strings declaradas usando '' | ||
+ | </ | ||
+ | ===== Leitura e escrita ===== | ||
+ | |||
+ | A escrita de strings pode ser feita com '' | ||
+ | |||
+ | <code c> | ||
+ | char nome[] = "Homer Simpson" | ||
+ | |||
+ | printf (" | ||
+ | |||
+ | puts (nome) ; // escrita com puts | ||
+ | |||
+ | for (i = 0; i < strlen(nome); | ||
+ | putchar (nome[i]) ; | ||
+ | </ | ||
+ | |||
+ | Por sua vez, a leitura de strings pode ser feita usando a função '' | ||
+ | |||
+ | <code c> | ||
+ | #define SIZE 100 | ||
+ | |||
+ | char nome[SIZE+1] ; // não esquecer do ' | ||
+ | |||
+ | printf (" | ||
+ | |||
+ | // lê até encontrar espaço, tabulação, | ||
+ | scanf (" | ||
+ | |||
+ | // idem, no máximo 20 caracteres | ||
+ | scanf (" | ||
+ | |||
+ | // lê somente letras e dígitos (até encontrar outro caractere) | ||
+ | scanf(" | ||
+ | |||
+ | // lê até encontrar um fim de linha (\n), ou seja | ||
+ | // lê enquanto não encontrar um caractere ' | ||
+ | scanf(" | ||
+ | getchar() ; // para ler o " | ||
+ | </ | ||
+ | |||
+ | <note important> | ||
+ | Observe que a leitura de uma string deve ser feita em uma variável com **espaço suficiente** para recebê-la (incluindo o ' | ||
+ | </ | ||
+ | |||
+ | Pode-se também usar a função '' | ||
+ | |||
+ | <code c> | ||
+ | // lê da entrada padrão até encontrar \n ou SIZE caracteres | ||
+ | fgets (nome, SIZE, stdin) ; | ||
+ | |||
+ | // a string lida por fgets pode incluir o \n do fim de linha, | ||
+ | // se ele foi encontrado; ele pode ser retirado assim: | ||
+ | nome[strcspn (nome, " | ||
+ | </ | ||
+ | |||
+ | Para mais informações sobre as funções acima, deve ser consultada a respectiva página de manual Unix. | ||
+ | |||
+ | <note warning> | ||
+ | Existe uma função de leitura '' | ||
+ | </ | ||
+ | |||
+ | ===== Manipulação ===== | ||
+ | |||
+ | A manipulação de strings é geralmente efetuada através de funções disponíveis na biblioteca padrão C, que podem ser acessadas através dos arquivos de cabeçalho '' | ||
+ | |||
+ | Algumas das funções mais usuais são: | ||
+ | |||
+ | |< - 35% >| | ||
+ | ^ função ^ operação realizada ^ | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | | '' | ||
+ | |||
+ | Várias outras funções para manipulação de strings estão disponíveis na [[http:// | ||
+ | |||
+ | ===== Exercícios ===== | ||
+ | |||
+ | Escrever programas em C para: | ||
+ | |||
+ | - Ler uma string da entrada padrão e escrevê-la na saída padrão ao contrário (do final para o início), de forma similar ao comando '' | ||
+ | - Calcular o tamanho de uma string (sem usar '' | ||
+ | - Converter as letras de uma string em minúsculas (dica: estude a estrutura da tabela ASCII antes de implementar). | ||
+ | - Ler linhas da entrada padrão e escrevê-las na saída padrão em ordem alfabética crescente, de forma similar ao comando '' | ||
+ | - Remover de uma string os caracteres que não sejam letras, números ou espaço, sem usar string auxiliar. | ||
+ | - Remover de uma string caracteres repetidos em sequência (rr, ss, ee, etc), sem usar string auxiliar. | ||
+ | - Colocar entre colchetes ([ ]) os caracteres de uma string que não sejam letras, números ou espaço; as alterações devem ser feitas na própria string, sem usar string auxiliar. | ||
+ | - Escrever uma função '' | ||
+ | - Escrever sua própria versão das funções de manipulação de strings '' | ||
+ | - Escrever uma função '' | ||
+ | * A cara rajada da jararaca | ||
+ | * O poeta ama até o pó | ||
+ | * Socorram-me, | ||