Sistemas Operacionais e Introdução à Programação Programação com linguagem C 1
Variáveis na linguagem C: tipo char O tipo char representa um caractere ASCII (ocupa só 1 byte) int main(int argc, char ** argv) { char letra; letra = 'A'; printf( letra=%c\n, letra); } 2
Variáveis na linguagem C: tipo char O tipo char representa um também um número inteiro de 1 byte (-128 a 127) int main(int argc, char ** argv) { char c; c = 0; printf( c=%d\n, c + 1); } 3
Variáveis na linguagem C: tipo char Quando se usa uma variável char para guardar um caractere, ela guarda é seu código ASCII: int main(int argc, char ** argv) { char c; c = 65; printf( c = %c (%d)\n, c, c); c = 'A'; printf( c = %c (%d)\n, c, c); } 4
Variáveis na linguagem C: tabela ASCII 5
Variáveis na linguagem C: strings Strings são representadas como vetores de caracteres A variável string é declarada da seguinte forma: char nome[32]; // variável nome com capacidade 32 O tamanho do vetor corresponde a quantos caracteres pode ter a string Isto é a capacidade da variável string, não o comprimento do texto ali guardado! O texto guardado na variável pode ter comprimento variável Usa-se o caractere nulo (valor 0 numérico) para marcar o final do texto 6
Variáveis na linguagem C: strings Exemplo de uso de strings: #include <string.h> #include <stdio.h> int main(int argc, char ** argv) { char nome[32]; } printf( Digite um nome: ); scanf( %s, nome); // repare que com strings não se usa o operador & printf( Nome informado: %s\n, nome); printf( Comprimento da string: %d\n, strlen(nome)); printf( Primeira letra do nome: %c\n, nome[0]); printf( Última letra do nome: %c\n, nome[strlen(nome) 1]); 7
Variáveis na linguagem C: strings Outro exemplo de uso de strings: #include <string.h> #include <stdio.h> int main(int argc, char ** argv) { char * nome ; // Qual a capacidade da string??? int len; } nome = Manuel ; // uma constante... printf( Variável nome=%s\n, nome); len = strlen(nome); printf(... e %s tem %d caracteres\n, nome, len); printf( Último caractere é: \ %c\ (codigo %d)\n, nome[len], nome[len]); 8
Variáveis na linguagem C: strings A variável string pode ser declarada também assim: char * nome[32]; // variável nome com capacidade 0 Neste caso, a variável string não tem memória alocada! Por enquanto, não pode guardar caracteres A capacidade de armazenamento pode ser definida depois (em tempo de execução), dependendo da necessidade 9
Variáveis na linguagem C: strings Exemplo de uso de strings: #include <string.h> #include <stdio.h> int main(int argc, char ** argv) { char * nome ; // Qual a capacidade da string??? char aux[128]; int len; } scanf( %s, aux); nome = strdup(aux); // gera uma cópia do conteúdo de aux printf( Variável nome=%s\n, nome); 10
Variáveis na linguagem C: funções para strings char * strncat(s1, s2, n): concatena até n caracteres da string s2 ao final da string s1 Repare que s1 deve ter capacidade para receber esses n caracteres adicionais!!! char * strncpy(s1, s2, n): copia até n caracteres da s2 para s1 int strlen(s1): devolve o tamanho da string s1 int strncmp(s1, s2, n): compara os n primeiros caracteres de s1 e s2. O resultado é 0 se forem iguais, negativo se s1 for alfabeticamente menor que s2, e positivo caso contrário char * strdup(char * s1): gera uma cópia da string s1 11
Variáveis na linguagem C: funções para strings int snprintf(s1, n, formato, arg1,...): igual ao printf, mas o texto gerado é gravado na variável string s1 (no máximo n caracteres). char *strstr(s1, s2): localiza a primeira ocorrência de s2 dentro de s1 12
Variáveis na linguagem C: exemplos com strings Concatena duas strings (nome e sobrenome): #include <string.h> #include <stdio.h> int main(int argc, char ** argv) { char nome[32], sobrenome[32], nomecompleto[64]; } scanf( %s, nome); scanf( %s, sobrenome); strncpy(nomecompleto, nome); strncat(nomecompleto,, 1); strncat(nomecompleto, sobrenome, 32); printf( Nome informado: %s\n, nomecompleto); printf( Comprimento da string: %d\n, strlen(nomecompleto)); 13
Variáveis na linguagem C: exemplos com strings Concatena duas strings, mas usando snprintf : #include <string.h> #include <stdio.h> int main(int argc, char ** argv) { char nome[32], sobrenome[32], nomecompleto[64]; } scanf( %s, nome); scanf( %s, sobrenome); snprintf(nomecompleto, 64, %s %s, nome, sobrenome); printf( Nome informado: %s\n, nomecompleto); printf( Comprimento da string: %d\n, strlen(nomecompleto)); 14
Variáveis na linguagem C: exemplos com strings Verifica se senha digitada é válida: #include <string.h> #include <stdio.h> int main(int argc, char ** argv) { char senha[32]; char tentativa[32]; } strncpy(senha, Cfacil ); printf( senha: ); scanf( %s, tentativa); if (strncmp(senha, tentativa, 32) == 0) printf( Acesso autorizado\n ); else printf( Acesso negado!!!\n ); 15
Variáveis na linguagem C: exemplos com strings Compara duas strings lidas, e mostra-as em ordem alfabética: #include <string.h> #include <stdio.h> int main(int argc, char ** argv) { char nome1[32], nome2[32]; int comparacao; } scanf( %s, nome1); scanf( %s, nome2); comparacao = strncmp(senha, tentativa, 32); if (comparacao >= 0) printf( %s, %s\n, nome1,nome2); else printf( %s, %s\n, nome2, nome1); 16
Variáveis na linguagem C: exercícios com strings Faça um programa que leia o nome e sobrenome de uma pessoa, e armazene-o numa variável segundo estes formatos: i) Nome Sobrenome ii) Sobrenome, Nome iii) Sobrenome, Inicial_do_Nome Faça um programa que leia o nome de um arquivo e a partir dele gere seu caminho completo (desde a raiz). Assuma que o arquivo esteja: i) No diretório atual ii) No diretório /tmp 17
Variáveis na linguagem C: exercícios com strings Faça um programa que leia o caminho completo de um arquivo, e verifique se esse arquivo está dentro de um dos seguintes diretórios: i) /tmp ii) /home/aluno iii) diretório atual Faça um programa que leia três nomes pelo teclado, e informe o primeiro e o último em ordem alfabética. Faça um programa que leia três nomes pelo teclado, e informe o primeiro e o último por ordem de tamanho. 18
Variáveis na linguagem C: exercícios com strings Faça uma função que verifique se um determinado caractere de uma string é letra maiúscula, minúscula, ou não é uma letra. Faça então um programa para testá-la. Faça um programa que leia uma frase pelo teclado e pesquise se essa frase contém as palavras-chaves: para, de, com. Modifique o programa anterior para que as palavras-chaves encontradas sejam substituídas por palavras equivalentes com letras maiúsculas. Faça um programa que localize uma palavra dentro de uma frase, e remova-a. Faça um programa que localize uma palavra dentro de uma frase, e insira uma outra palavra na sua frente. 19
Variáveis na linguagem C: exercícios com strings Faça um programa que localize uma palavra dentro de uma frase, e a ponha entre parênteses. Faça um programa que troque a primeira e segunda palavras de lugar. 20