CCO 013 e COM 110 Fundamentos de Programação Prof. Roberto Affonso da Costa Junior Universidade Federal de Itajubá AULA 09 ● Agregados Homogêneos – Variáveis Indexadas Cadeia de Caracteres ● String ● Cadeia ou string ● ● O Cadeia ou string? – É a coleção de caracteres. Qual a diferença entre Vetor de Caracter e String? – É o caractere nulo ('\0') que é interpretado como fim da parte relevante do vetor Programa 1 #include <stdio.h> #include <string.h> int main() { char st[100]; //Vetor de caracter int i; st[0] = 'A'; st[1] = 'B'; st[2] = 'C'; st[3] = '\0'; st[4] = 'D'; Programa 1 printf("Imprimindo a string\n"); printf("%s\n",st); printf("Imprimindo o vetor de caracter\n"); for (i = 0; i < 5; i++) { printf("%c", st[i]); } printf("\n"); return 0; } Saída do programa 1 e comentários ● O que o programa imprimiu? Imprimindo a string ABC Imprimindo o vetor de caracter ABCD ● Qual a diferença ? – O caractere nulo ('\0') Biblioteca “string.h” ● ● Para o programa anterior você declarou a include “string.h”, contudo, ela não foi necessária, pois não utiliza nenhuma função dessa biblioteca. Vamos colocar no exercício anterior, embaixo do printf("\n"); e antes do return 0; o seguinte comando da biblioteca “string.h” printf(“tamanho de st = %d\n”, strlen(st)); O que saiu? ● Qual foi o resultado do printf? ● Porque? Programa 2 #include <stdio.h> #include <string.h> int main() { char st[100] = "Eu amo programar"; //Vetor de caracter int i; printf("Imprimindo a string\n"); printf("%s\n",st); Programa 2 printf("Imprimindo o vetor de caracter\n"); for (i = 0; i < strlen(st); i++) { printf("%c", st[i]); } printf("\n"); printf("tamanho de st = %d\n", strlen(st)); return 0; } Saída do programa 2 ● O que o programa imprimiu? Imprimindo a string Eu amo programar Imprimindo o vetor de caracter Eu amo programar tamanho de st = 15 ● Porque os dois sairão iguais? ● Qual a diferença entre eles? Programa 3 #include <stdio.h> #include <string.h> int main() { char st1[20], st2[20]; //Vetor de caracter int i, n; printf("Entre com uma palavra: "); scanf(" %s",st1); n = strlen(st1); //Tamanho de st1 Programa 3 for (i = n - 1; i > -1 ; --i) { st2[i] = st1[n - 1 - i]; } printf("st1 = %s\n", st1); printf("st2 = %s\n", st2); return 0; } Perguntas do programa 3 ● ● ● Se você digitar seu primeiro nome como ele sai em st2? Qual o tamanho do seu primeiro nome? É o valor de n? Você pode imprimir esse valor? O que o laço for está fazendo com seu primeiro nome? função strcmp() ● ● O nome é uma abreviatura de “string compare”; Recebe duas strings e compara as duas lexicograficamente. Ela devolve um número negativo se a primeira string for lexicograficamente menor que a segunda, devolve 0 se as duas strings são iguais e devolve um número positivo se a primeira string for lexicograficamente maior que a segunda. Programa 4 #include <stdio.h> #include <string.h> int main() { char st1[20], st2[20]; //Vetor de caracter printf("Entre com uma palavra: "); scanf(" %s",st1); printf("Entre com outra palavra: "); scanf(" %s",st2); printf("A diferença entre elas é: %d\n", strcmp(st1,st2)); return 0; } Pergunta do programa 4 ● ● ● Entre com st1 = aaa e st2 = aaa. Responda: Responda – A diferença entre elas é: ?? Entre com st1 = aaa e st2 = aba. Responda: Responda – A diferença entre elas é: ?? Entre com st1 = aba e st2 = aaa. Responda: Responda – A diferença entre elas é: ?? Lexicográfica ● A ordem lexicográfica a que nos referimos acima é análoga à ordem das palavras em um dicionário. Ela se baseia na ordenação dos caracteres estabelecida na tabela ISO8859-1*, da mesma forma que a ordem das palavras em um dicionário se baseia na ordenação usual das letras no alfabeto. Para comparar duas strings s e t, procura-se a primeira posição, digamos k, em que as duas strings diferem. Se s[k] vem antes de t[k] na tabela ISO então s é lexicograficamente menor que t. Se k não está definido então s e t são idênticas ou uma é prefixo próprio da outra; nesse caso, a string mais curta é lexicograficamente menor que a mais longa. *http://www.ime.usp.br/~pf/algoritmos/apend/iso-8859-1.html função strcpy() ● A função strcpy() é usada para copiar o conteúdo de um string para outro. Ela tem dois argumentos: strcpy(s1, s2) copia o conteúdo do string s2 para o string s1. função strcat() ● A função strcpy() é usada para concatenar o conteúdo de uma string para outro. Ela tem dois argumentos: strcat(s1, s2) concatena o conteúdo do string s2 para o string s1. função strchr() ● ● Retorna um ponteiro para a localização em que o caractere 'ch' aparece na string pela primeira vez na string apontada por *str, ou NULL se não encontrar. Isto é, ela retorna o índice da primeira ocorrência de 'ch' função strstr() ● ● Retorna um ponteiro que indica a primeira ocorrência da string 'substr' na string 'str'. Isto é, ela retorna o índice da primeira ocorrência de 'substr' Programa 5 #include <stdio.h> #include <string.h> int main() { char st1[20], st2[20]; //Vetor de caracter printf("Entre com uma palavra: "); scanf(" %s",st1); printf("Entre com outra palavra: "); scanf(" %s",st2); Programa 5 if (strcmp(st1,st2) == 0) { printf("São iguais\n"); } else { printf("Não são iguais\n"); } return 0; } Treinamento 1)Faça um programa que receba uma string e a retorne escrita de trás pra frente. 2)Faça um programa que leia uma string do teclado e diga se ela é palíndrome. Uma string é palíndrome quando pode ser lida tanto de trás pra frente quanto de frente para trás e possui exatamente a mesma seqüência de caracteres. Ex.: ASA, SUBI NO ONIBUS. Treinamento 3)Faça um programa que conte quantas letras maiúsculas existem numa string recebida como parâmetro. 4)Faça um programa que conte quantas letras minúsculas existem numa string recebida como parâmetro. 5)Faça um programa que troque todas as letras maiúsculas por minúsculas e as minúsculas por maiúsculas de uma string recebida como parâmetro. 6)Faça um programa que receba 2 strings (A e B) e retorne uma terceira string (C) formada pelos caracteres de A e B intercalados. Ex.: Se A='Quarta' e B='Segunda', a resposta deve ser 'QSueagrutnada'. Treinamento 7)Faça um programa que dadas as strings C e B do exercício anterior, retorne a string A. 8)Faça um programa que receba como entrada três strings (A, B e C) e retorne uma quarta string formada pela substituição de todas as ocorrências da string B pela string C dentro da string A. Ex.: Se A='Abra a porta para entrar para poder descansar calmamente', B='para' e C='e tente', a resposta deve ser: 'Abra a porta e tente entrar e tente descansar calmamente'. 9)Faça um programa que receba uma string A a ordene. Treinamento 10)Faça um programa que leia uma string e um caracter. Localize esse caracter na string e troque-o por %. 11)Faça um programa que leia duas strings (A e B). B é uma substring de A. Diga em que posição da string ela ocorre. Exemplo: “Jogando bola” e “ando”, ela ocorre em 12) Crie um programa que duplique cada caractere da string.