Computação Eletrônica Strings em C Prof. Leandro Almeida Adaptado de Ameliara Freire Strings Strings em C Em C não há o tipo de dado String, deve-se usar um vetor de caracteres, com uma posição para cada caractere e uma extra para um delimitador ‘\0’ (null). Declaração: char identificador[dimensão + 1]; Exemplo: char str[8] = “EXEMPLO”; =>char str[8] = {‘E’, ‘X’, ‘E’, ‘M’, ‘P’, ‘L’, ‘O’, ‘\0’}; As funções de manipulação de Strings armazenam automaticamente o ‘\0’ 2 Strings Strings em C Constantes: (Entre aspas duplas) “UFRPE” = ‘U’ ‘F’ ‘R’ ‘P’ ‘E’ ‘\0’ Exemplo: char exemplo[10] = “UFRPE”; Processando Strings Cada elemento do vetor é um caractere e pode ser acessado individualmente Um elemento ‘\0 significa o fim do vetor. 3 Strings Strings em C Exemplo: main( ) { char nome[10] = “exemplo”; printf(“%s”, nome); printf(“%c”, nome[0]); } 4 Caracteres Entrada e saída para caracteres getchar e putchar int getchar() recebe um único caractere. Armazena a entrada até que <ENTER> (‘\n’) seja pressionado. retorna como um inteiro. int putchar(int c) imprime um único caractere passado como inteiro. retorna o mesmo inteiro 5 Caracteres Entrada e saída #include <stdio.h> #include <conio.h> main( ) { int c; printf( "Digite um caracter:"); c = getchar( ); printf("\nValor inteiro: %d",c); printf( "\nInfo digitada: "); putchar( c ); getche(); } 6 Strings Entrada e saída usando gets e puts: gets – faz a leitura de uma linha até digitar <enter> Incluindo espaços, caracteres especiais, números, acentos, etc. O “fflush(stdin)” deve vir antes, principalmente quando o gets é usado dentro de um laço de repetição. puts – realiza a apresentação do vetor lido com gets A impressão também pode ser realizada usando printf 7 Ajustando o scanf Para ler cadeias de caracteres com scanf devemos alterar a string controle: scanf("%[^\n]s", nome); Ou scanf("%99[^\n]s", nome); Strings Entrada e saída usando scanf e printf: #include <stdio.h> #include <conio.h> main( ) { char str[100]; printf( "Digite uma informacao:"); scanf(“%s”, str); printf( "\nInfo digitada: "); printf("\n%s",str); getche(); } 9 Strings Entrada e saída usando gets e puts: #include <stdio.h> #include <conio.h> main( ) { char str[100]; printf( "Digite uma informacao:"); fflush(stdin); gets(str); printf( "\nInfo digitada: "); puts( str ); printf("\n%s",str); getche(); } 10 Strings Entrada e saída para strings scanf: lê strings até que um espaço em branco seja encontrado. Exemplo: #include <stdio.h> main(){ char nome[40]; printf(“Digite seu nome:”); scanf(“%s”, nome); printf(“Boa noite %s”, nome); } 11 Strings Funcoes de manipulacao de strings e caracteres strcopy(a,b): faz uma copia de todos os caracteres de b para a. strcat(a,b): adiciona os caracteres da string b à string a strcmp(a,b): compara duas strings caracter por caracter e retorna 0 se elas forem iguais. Nunca compare strings usando o operador ==. islower(char): diz se o caracter é minusculo isupper(char): diz se um caracter é maiusculo 12 13 14 Strings Funcoes de manipulacao de strings e caracteres strlen(char[] a): devolve o tamanho da string a tolower(char): devolve o caracter para minusculo toupper(char): devolve o caracter pra maiusculo 15 Exercicio Faça um programa que solicita o usuario digitar o nome e endereco completo (armazenando em duas strings). Em seguida o programa imprime na tela o que foi digitado. 16 Exercicio Faça um programa que solicita o usuário digitar o nome e sobrenome Em seguida o programa solicita ao usuário digitar rua, numero, bairro, cidade (capturando todos os dados como string). Finalmente o programa concatena o nome e sobrenome e mostra na tela. Depois o programa concatena os dados do endereço e imprime o endereço de uma só vez. 17 1) Elabore um programa que receba uma linha de texto e conte as vogais apresentando o respectivo histograma na seguinte forma: Exemplo: Linha de texto passada: “Na próxima quarta-feira é feriado.” a: e: i : o: u: ****** (6) *** (3) *** (3) ** (2) * (1) Tomar cuidado com letras em maiúsculo. Pode ser necessário o uso de funções apresentadas na aula sobre strings. 1) Implemente um programa que receba uma linha de texto, retire os espaços em excesso existentes deixando apenas um espaço entre as várias palavras. As alterações de quantidade de espaços em branco devem ser realizadas diretamente no vetor do texto. Não deve ser utilizado vetor auxiliar. 18