Baixe o app para aproveitar ainda mais
Prévia do material em texto
Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica COMPUTAÇÃO BÁSICA Matrizes Prof. Bruno Macchiavello (bruno@cic.unb.br) Universidade de Brasília – UnB Instituto de Ciências Exatas – IE Departamento de Ciência da Computação – CIC Prof. Bruno Macchiavello 1 Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Introdução • Uma cadeia de caracteres (char), ou string, é uma seqüência de letras e símbolos (dígitos, ?, !, &, *, etc). • No computador letras, números, símbolos e sinais de pontuação possuem uma representação baseada em números, na qual cada número representa um caracterenúmeros, na qual cada número representa um caractere diferente. • Atualmente existem dois padrões que são mais utilizados para associar números a caracteres, que são o padrão ASCII (American Standard Code for Information Interchange) e o padrão UTF (de 8, 16 ou 32 bits). Prof. Bruno Macchiavello 2 Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica ASCII e UTF • No padrão ASCII esses números são armazenados em variáveis de 1 byte (8 bits), que podem representar 256 números diferentes • No padrão UTF-8 eles possuem tamanho de representação variável. No UTF 16 e 32 são de tamanho fixo. • Aqui nos interessa apenas a representação de um byte (ASCII). Prof. Bruno Macchiavello 3 Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Tabela ASCII Prof. Bruno Macchiavello 4 Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica String como vetor • Com a tabela ASCII podemos representar uma letra como um número, para representar uma seqüência de caracteres usamos VETORES. • Usaremos então a representação de uma string como um vetor de caracteres (variáveis do tipo char). • Seu final será representado por uma posição no vetor contendo o valor NULO. Prof. Bruno Macchiavello 5 Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Exemplo Exemplo: Faça um algoritmo que declare como variáveis duas strings de 20 posições e uma string de 40 posições. Leia as duas de 20, crie uma intercalação das mesmas, armazenando o resultado na de 40 e mostrando o resultado na tela. O tamanho das duas strings inseridas será igual e sempre será menor ou igual a 20 caracteres. Algoritmo SomaEMedia Variáveis i, : inteiro S1, S2 : vetor[21] de char Prof. Bruno Macchiavello 6 S1, S2 : vetor[21] de char S3 : vetor[41] de char Início Leia(S1) Leia(S2) i←0 Enquanto (S1[i] != NULO) faça S3[2*i]←S1[i] S3[2*i+1]←S2[i] i←i+1 FimEnquanto S3[2*i]←NULO Escreva(“String resultante Soma = ”,S3); Fim Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Observações • As variáveis foram declaradas como vetores. O segredo aqui é notar que elas foram declaradas com uma posição a mais do que o pedido, pois é necessário armazenar o caractere NULO sinalizando o final de cada string. A função Leia armazena esse caractere automaticamente. • A condição Enquanto (S1[i] != NULO), é utilizada para testar se a string S1 não chegou ao fim. Neste caso, essa condição vale pois na especificação do exemplo é garantido que S1 e S2 terão o mesmo tamanho. • Veja também que ao final do algoritmo colocamos o caractere NULO em S3, antes de mandar escrever na tela. Isto é necessário para que a função Escreva tenha o comportamento esperado. Prof. Bruno Macchiavello 7 Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica String em C • A linguagem C NÃO oferece suporte diretamente ao tratamento de strings, apenas por meio de bibliotecas, como a <string.h>. • Caso o programador não deseje utilizá-las,• Caso o programador não deseje utilizá-las, deverá fazer tudo manualmente, tendo por base o conceito de vetores de caracteres, e tratando esses vetores da maneira que já foi vista nesse curso. Prof. Bruno Macchiavello 8 Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Usando Strings • Em C, uma cadeia de caracteres é terminada com o marcador especial: ‘\0’ (NULO) • Portanto utilizar uma posição além do tamanho • Portanto utilizar uma posição além do tamanho máximo desejado. SINTAXE char identificador [ numero_de_caracteres+1] Prof. Bruno Macchiavello 9 Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Usando String • Exemplos de inicialização char linha[181]; char nome[31]; char texto[ ] = “nome”; • Para escrever um string utilizar PRINTF com o formato %s • Para ler um string utilizar SCANF com o formato %s Prof. Bruno Macchiavello 10 Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Usando String • A função scanf precisa ser evocada de maneira especial para contrário ela irá ler e armazenar somente até o primeiro tratar da leitura de frases (strings) compostas por mais de uma palavra, caso espaço em branco. • Para ler uma string S sem parar nos espaços (só parando no• Para ler uma string S sem parar nos espaços (só parando no caractere de nova linha), use: • Outra alternativa é: • pois o %*c descarta o primeiro caractere que vier após a string, no caso, o newline, dispensando o getchar();. Prof. Bruno Macchiavello 11 scanf("%[^\n]s",string1); getchar(); scanf("%[^\n]s%*c",string1); Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Exemplo Exemplo: Programa em C do algoritmo apresentado anteriormente para fazer intercalação de duas strings. Aqui presumimos que S1 e S2 terão sempre o mesmo tamanho e usamos apenas os conceitos de vetores de caracteres, sem usar a biblioteca <string.h> #include <stdio.h> int main () { int i; char S1[21], S2[21], S3[41]; Pode-se digitar NULL ou '\0 ' Prof. Bruno Macchiavello 12 char S1[21], S2[21], S3[41]; scanf("%s",S1); scanf("%s",S2); for (i=0; S1[i]!=NULL; i++) { S3[2*i]=S1[i]; S3[2*i+1]=S2[i]; } S3[2*i]=NULL; printf("%s\n",S3); getchar(); return 0; } ou '\0 ' Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Algumas Funções da STRING.H • Função strcpy strcpy(char *destino, char *origem); Copia o conteúdo da string origem para a string destino (o Copia o conteúdo da string origem para a string destino (o conteúdo de destino é perdido). Exemplo: Prof. Bruno Macchiavello 13 char str1[] = “Aluno:”; char str2[] = “IRA:”; char texto[21]; strcpy(texto, “Fulano de Tal”); printf(“%s %s\n”, str1, texto); strcpy(texto, “4.99”); printf(“%s %s\n”, str2, texto); Departamento de Ciência da ComputaçãoDepartamento de Ciência da ComputaçãoUniversidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Algumas Funções da STRING.H • Função strlen strlen(char *str1); Retorna um valor inteiro com o tamanho da string.Retorna um valor inteiro com o tamanho da string. Exemplo: Prof. Bruno Macchiavello 14 char str1[] = “Tamanho da sring”; char texto[21]; int n; scanf(“%s”,str2); n = strlen(str1); printf(“%s tem tamanho %d\n”, str1, n); n = strlen(str2); printf(“%s tem tamanho %d\n”, str2, n); Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Algumas Funções da STRING.H • Função strcat strcat(char *destino, char *origem); Concatena, insere a string origem em destino (destino Concatena, insere a string origem em destino (destino precisa ter o tamanho adequado) Exemplo: Prof. Bruno Macchiavello 15 char str1[61];char str1[61]; char str2[61]; scanf(“%s”,str2); scanf(“%s”,str1); strcpy(str1, str2); printf(“\n%s\n”, str1); scanf(“%s”,str1); strcat(str1, str2); printf(“\n%s\n”, str1); Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Algumas Funções da STRING.H • Função strcmp strcmp(char *str1, char * str2); 0 (str1==str2), <0 (str1 < str2), e >0 (str1 > str2)0 (str1==str2), <0 (str1 < str2), e >0 (str1 > str2) Exemplo: Prof. Bruno Macchiavello 16 char str1[21], str2[61]; int res; scanf(“%s %s”,str1, str2); res = strcmp(str1, str2); if (res > 0 ) printf(“’%s’ e maior que ‘%s’\n, str1,str2); else if (res < 0) printf(“’%s’ e maior que ‘%s’\n, str2,str1); else printf(“’%s’ e ‘%s’ são iguais\n, str1,str2); Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Algumas Funções da STRING.H FUNÇÃO DESCRIÇÃO char* strstr (char *palheiro, char *agulha) Essa função procura por *agulha em *palheiro, e retorna um ponteiro para a posição onde *agulha ocorre, ou NULL caso isso não aconteça. int strcasecmp (char *s1, char Possui um funcionamento similar ao da Prof. Bruno Macchiavello 17 int strcasecmp (char *s1, char *s2): Possui um funcionamento similar ao da strcmp, mas ela ignora as diferenças entre maiúsculas e minúsculas. char* strchr (char *s, char c): Retorna um ponteiro para a primeira ocorrência do caractere c em s, ou NULL caso não haja. int atoi(char *str1) Converte o valor da string str1 para um valor inteiro double atof(char *str2) Converto o valor da string str1 para um valor double. Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Vetores de String • Vetores de strings são matrizes bidimensionais de caracteres. • Definição de uma matriz bidimensional de caracteres (“vetor de strings”) em pseudocódigo: (“vetor de strings”) em pseudocódigo: • Definição de uma matriz bidimensional de caracteres (“vetor de strings”) em C: Prof. Bruno Macchiavello 18 Variáveis <nome> : matriz [<nro_strings>] [<compr_strings>] de caracteres char <nome>[<nro_strings>][<comprimento_strings>]; Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Exemplo Exemplo: Um algoritmo que lê 5 strings e as exibe na tela. Algoritmo SomaEMedia Variáveis i, : inteiro nome : matriz[5][30] de char Início Prof. Bruno Macchiavello 19 Início Para i = 0 até 4 faça Escreva(“Digite uma string: ”) Leia (nome[i]) FimPara Escreva(“As strings que voce digitou foram ”) Para i = 0 até 4 faça Escreva(nome[i]) FimPara Fim Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Exemplo Exemplo: Programa em C do algoritmo apresentado no slide anterior, que lê 5 strings e as exibe na tela. #include <stdio.h> int main () { int i; char nome[5][30]; Prof. Bruno Macchiavello 20 char nome[5][30]; for (i=0; i<5; i++) { printf ("\nDigite uma string: "); scanf ("%s",nome[i]); } printf ("\nAs strings que voce digitou foram:\n\n"); for (i=0;i<5;i++) printf ("%s\n",nome[i]); getchar(); getchar(); return 0; } Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Exercicios 1. Faça um programa em C que leia duas strings e concatene-as em uma terceira string, mostrando o resultado na tela. Você pode definir o tamanho das strings, lembrando que o usuário poderá informar strings de tamanhos diferentes. (SEM USAR A STRING.H) 2. Crie um programa que leia o nome de uma pessoa (20 caracteres) e o Prof. Bruno Macchiavello 21 2. Crie um programa que leia o nome de uma pessoa (20 caracteres) e o escreva de trás para frente. Você pode usar a função strlen para descobrir o tamanho do nome digitado. 3. Faça um programa para remover n caracteres de uma string s, a partir da posição i. O usuário deve informar s, n, e i. (SEM USAR A STRING.H) Departamento de Ciência da ComputaçãoDepartamento de Ciência da Computação Universidade Universidade de de BrasíliaBrasília Computação BásicaComputação Básica Exercicios 2. Um erro comum de digitação é colocar as mãos no teclado uma coluna à direita da posição correta. Com isso o 'Q' será digitado como 'W', o 'J' como 'K' e assim por diante. Escreva um programa que decodifique uma mensagem digitada dessa maneira. A entrada do seu programa conterá uma linha escrita dessa forma, e ela pode conter caracteres maiúsculos, espaços, números e sinais de pontuação. Seu programa deve fazer a correção em função do layout de teclado abaixo. Espaços em branco na entrada devem ser reproduzidos na saída. Prof. Bruno Macchiavello 22 entrada devem ser reproduzidos na saída. Exemplo de entrada: O S, GOMR YPFSU/ Exemplo de saída: I AM FINE TODAY.
Compartilhar