Baixe o app para aproveitar ainda mais
Prévia do material em texto
ECT1203 Linguagem de Programação 2014.2 Profa. Caroline Rocha Aula 22 – Strings Universidade Federal do Rio Grande do Norte Escola de Ciências e Tecnologia Hora de silenciar o celular • Manter o celular sempre desligado/silencioso quando estiver em sala de aula • Nunca atender o celular em sala de aula Objetivo da aula Apresentar Strings em C++: ▫ Leitura e Escrita de Strings ▫ Funções de manipulação de String ▫ Exemplos de utilização de String String • Sequência de caracteres • Importante em muito contextos da programação • Constantes string são representados por uma sequência de caracteres entre aspas duplas: “Alo Mundo” “xyz 123 *$^&!” “V” “Pedro Alvares Cabral” Strings em C • Não existe o tipo string • São armazenadas como vetores de caracteres • Os vetores podem ser de qualquer tamanho • Um delimitador indica o fim da string: o caractere ‘\0’ “Alo Mundo” A l o M u n d o \0 Variáveis string • Deve-se alocar um vetor grande o bastante para guardar a string, incluindo o delimitador ‘\0’ • Com inicialização: char str1[4] = {‘A’,‘l’,‘o’,‘\0’} char str2[4] = “Alo”; char str3[] = “Alo”; Exemplo 1 ... int main(){ char s[] = ”Alo Mundo"; cout << s << endl; for (int i = 0; i < 9; i++){ cout << s[i] << ","; } cout << endl; ... Alo Mundo A,l,o, ,M,u,n,d,o, Exemplo 2 ... int i; char s[] = “Alo Mundo”; cout << s << endl; i = 0; while(s[i] != '\0') { cout << s[i] << ","; i++; } cout << endl; cout << "s[" << i << "] = " << int(s[i]) << endl; ... Alo Mundo A,l,o, ,M,u,n,d,o, s[9] = 0 Exemplo 3 ... char s[] = “Alo Mundo”; cout << “String = “ << s << endl; s[0] = ‘B’; s[1] = ‘o’; s[2] = ‘m’; cout << “String = “ << s << endl; s[3] = ‘\0’; cout << “String = “ << s << endl; ... String = Alo Mundo String = Bom Mundo String = Bom • Cadeias podem conter caracteres de espaços, mas não podemos usar cin>> para ler cadeias com espaços. • Para isso, vamos usar cin.getline(s,n), onde s é um vetor de caracteres onde a string será armazenada e n é o número de caracteres lidos, incluindo ‘\0’. • Nesse caso, o caractere delimitador da leitura é ‘\n’. • Para outro caractere delimitador c, usa-se cin.getline(s,n,c). Lendo com espaços ... char s[50]; cout << “Nome? ”; cin.getline(s, 50); cout << “Nome lido: ” << s << endl; cout << “Nome? ”; cin >> s; cout << “Nome lido: ” << s << endl; ... Lendo com espaços Nome? Fulano de tal Nome lido: Fulano de tal Nome? Fulano de tal Nome lido: Fulano char nome[50]; gets(nome); //lendo uma string puts(nome); //escrevendo uma string • A função gets também lê strings contendo espaços. • A função puts imprime o caractere ‘\n’ ao final da string, isto é, pula uma linha. • Para usar gets e puts, é necessário incluir o arquivo de cabeçalho cstdio Outras formas de ler e escrever • C++ fornece uma variedade de funções para executar diferentes tarefas. • Exemplos: ▫ strlen(s) – calcula o tamanho de s ▫ strcpy(s1,s2) - copia s2 em s1 ▫ strcat(s1,s2) - concatena s2 ao final de s1 ▫ strcmp(s1,s2) - compara s1 e s2 • As funções estão definidas no arquivo de cabeçalho cstring Funções de string • retorna o tamanho da string s • conta o número de caracteres até ‘\0’ ser encontrado • não conta o caractere ‘\0’ • Exemplo: char str[] = “Bom dia!”; cout << “tam = ” << strlen(str) << endl; strlen(s) tam = 8 • copia os caracteres (incluindo ‘\0’) da string origem para destino. • destino deve ter espaço suficiente para receber origem. • retorna a string destino. • Exemplo: char A[50]; char B[50] = "Silva"; strcpy(A,"Joao"); puts(A); strcpy(A,B); puts(A); strcpy(destino,origem) Joao Silva • similar a strcpy, mas a cópia termina após n caracteres strncpy(destino,origem,n) • Compara as strings s e t • retorna um valor baseado no primeiro caractere diferente nas duas cadeias: menor que 0 (-1) ▫ se o primeiro caractere diferente em s é menor que em t maior que 0 (1) ▫ se o primeiro caractere diferente em s é maior que em t 0 ▫ se as duas strings contêm os mesmos caracteres strcmp(s,t) • Exemplo: strcmp(“alo”,“alo”) – retorna 0 strcmp(“blo”,“alo”) – retorna valor > 0 strcmp(“Alo”,“alo”) – retorna valor < 0 strcmp(“alo”,“alo mundo”) – retorna valor < 0 strcmp(“casas”,“casal”) – retorna valor > 0 • Expressão para determinar se duas strings s e t contêm os mesmos caracteres: !strcmp(s,t) strcmp(s,t) • strncmp(s1,s2,n) – compara os primeiros n caracteres • strcasecmp(s1,s2) – compara ignorando maiúsculas/minúsculas • strncasecmp(s1,s2,n) – compara os primeiros n caracteres ignorando maiúsculas/minúsculas Outras funções de comparação • concatena os caracteres da string fim ao final de inicio; • a string inicio deve ser suficientemente grande para receber fim; • retorna a string inicio. • Exemplo: char A[50] = “Joao”; char B[50] = “ Silva”; strcat(A,B); puts(A); strcat(inicio,fim) Joao Silva • similar a strcat mas concatena somente os n primeiros caracteres de fim em inicio. strncat(inicio,fim,n) Exercício 1 • Faça um algoritmo para converter uma cadeia de caracteres de letras maiúsculas em letras minúsculas. Exercício 2 • Dado o nome completo de uma pessoa imprimir apenas as iniciais seguidas cada uma de ponto e espaço. Exercício 3 • Codifique um programa na linguagem C que leia uma string de tamanho x, leia outra string de tamanho y e depois concatene as duas em outra string de tamanho x+y. Concatenar significa unir as duas strings (não é permitido utilizar a função strcat). TABELA ASCII
Compartilhar