Baixe o app para aproveitar ainda mais
Prévia do material em texto
Linguagem de Programação Aula 5 – Tratamento de caracteres e strings Prof.: Teresinha Letícia da Silva leticia@cafw.ufsm.br UFSM COLÉGIO AGRÍCOLA DE FREDERICO WESTPHALEN CURSO SUPERIOR DE TECNOLOGIA EM SISTEMAS PARA INTERNET Lógica de Programação Prof. Teresinha Letícia da Silva Tratamento de Strings em C Definição de string Strings são seqüências de caracteres diversos. São conhecidos por “literais” na teoria de algoritmos estruturados, sendo representados entre aspas. Alguns exemplos de strings: “Fulano da Silva”, “? Interrogação? “, “1,234”, “0”. Não existe um tipo String em C. Em C, strings são representadas através de vetores de caracteres, terminados com o caractere de fim de string cujo valor na tabela ASCII é zero (0 ou \0). Lógica de Programação Prof. Teresinha Letícia da Silva Declarando strings Uma string em C é declarada como um vetor de caracteres. Exemplos de declarações de string: char frase[20]; // somente declara char frase[20] = “Primeira string”; // declara e inicializa char frase[] = “Primeira string”; //Inicialização sem a dimensão char frase[6] = {‘T’, ‘e’, ‘s’, ‘t’, ‘e’, 0); /* inicializado como um vetor de caracteres comum, ‘forçando’ o caracter terminador */ Devemos utilizar uma posição além do tamanho desejado para que possa ser colocado o marcador ’\0’ no final da string quando essa tiver o tamanho máximo. Lógica de Programação Prof. Teresinha Letícia da Silva Leitura de caracteres Para capturarmos o valor de um caractere simples fornecido pelo usuário via teclado, usamos a função scanf, com o especificador de formato %c. char a; ... scanf("%c", &a); ... Podemos também ler um caracter, através das funções getchar(), getch() ou getche(). Exemplo: a=getchar(); Lógica de Programação Prof. Teresinha Letícia da Silva Lendo Strings O especificador %s pode ser utilizado para capturar cadeias de caracteres na função scanf. No entanto, seu uso é muito limitado. O especificador %s na função scanf pula os eventuais caracteres brancos e captura a sequência de caracteres não brancos. Exemplo: char cidade[81]; ... scanf("%s", cidade); ... Lógica de Programação Prof. Teresinha Letícia da Silva Lendo Strings Infelizmente, a leitura a partir do teclado utilizando o scanf lê somente até o primeiro espaço, ou seja, lê somente uma palavra, o que torna o seu uso desta forma um pouco restrito. Para contornar isso, podemos utilizar a função gets, que faz a leitura até encontrar o caracter de fim de linha (enter ). gets(variavelstring); Lógica de Programação Prof. Teresinha Letícia da Silva Lendo Strings Tanto o comando scanf quanto o gets podem ler mais caracteres que os existentes na string, provocando erros. A soluçãoo neste caso é utilizar uma função que tenha o mesmo comportamento do gets, mas que permita limitar a leitura a um tamanho máximo. Exemplo: fgets (texto, 50, stdin); Lógica de Programação Prof. Teresinha Letícia da Silva Escrevendo uma string na tela Podemos escrever uma string na tela caracter a caracter, mas é mais simples escrever utilizando o comando printf, com o mesmo comando utilizado para lê-la (%s) printf ("%s", texto); Lógica de Programação Prof. Teresinha Letícia da Silva Escrevendo uma string na tela De forma análoga ao gets e fgets, temos o puts e fputs, que escrevem a string na tela. puts (texto); fputs (texto, stdout); Lógica de Programação Prof. Teresinha Letícia da Silva Manipulando strings As strings são tão importantes que existe uma biblioteca de funções só com comandos para ela, a biblioteca string.h. #include <string.h> Lógica de Programação Prof. Teresinha Letícia da Silva Biblioteca string.h strlen strlen retorna o tamanho, em caracteres, de uma string dada. Na verdade o que strlen() faz é procurar o terminador de string e calcular a distância dele ao início da string. Por exemplo: char nome[20] = "Maria da Silva"; int s = strlen (nome); // s conterá o valor 14 Lógica de Programação Prof. Teresinha Letícia da Silva Biblioteca string.h strcpy strcpy copia o conteúdo de uma string para outra e coloca um terminador de string. Não podemos usar: string = “texto"; Sua sintaxe é strcpy (destino, origem). Exemplo: char nome[20]; char nome2[20] = "Oswald de Andrade"; strcpy (nome, nome2); // agora nome conterá "Oswald de Andrade" Lógica de Programação Prof. Teresinha Letícia da Silva Biblioteca string.h strncpy Tome cuidado com strcpy(), pois se a string a ser copiada for maior que a string de destino, provavelmente você gravará dados em lugares indesejados ― um problema conhecido como estouro de buffer. Para evitar esse problema, use a função strncpy, que recebe um terceiro argumento que corresponde ao número máximo de caracteres a serem copiados. Exemplo: char msg[5]; char nome[20] = "Maria da Silva"; strncpy (msg, nome,5); // agora msg conterá "Maria" Lógica de Programação Prof. Teresinha Letícia da Silva Biblioteca string.h strcat strcat concatena duas strings, adicionando o conteúdo da segunda ao final da primeira, além do terminador (\0). Note que a primeira string deve ter espaço suficiente para conter a segunda, para que não ocorra um "estouro de buffer". Por exemplo: char nome[50] = "Maria"; char sobrenome[] = " da Silva"; strcat (nome, sobrenome); // agora nome contém "Maria da Silva" Analogamente à função strncpy, existe também a função strncat, onde o número máximo de caracteres a serem copiados é o terceiro argumento. Lógica de Programação Prof. Teresinha Letícia da Silva Biblioteca string.h strcmp Se você tentar criar duas strings com o mesmo conteúdo e compará- las como faria como números, verá que elas "não são iguais". Isso ocorre porque, na verdade, o que está sendo comparado são os endereços de memória onde estão guardadas as strings. Para comparar o conteúdo de duas strings, você deve usar a função strcmp. strcmp(str1, str2) — Compara duas strings e retorna um valor = 0 - se str1 e str2 forem iguais < 0 - se str1 for menor que str2 > 0 - se str1 for maior que str2 Lógica de Programação Prof. Teresinha Letícia da Silva Biblioteca string.h strcmp É importante notar que a comparação feita por strcmp distingue maiúsculas de minúsculas. Isto é, as strings "ABC" e "abc" não são iguais para essa função. As variantes mais usadas de strcmp são: strncmp - compara apenas os n primeiros caracteres das duas strings, sendo n um terceiro argumento. stricmp - compara duas strings sem distinção entre maiúsculas e minúsculas. A sintaxe é igual à de strcmp. Essa função não faz parte da biblioteca padrão, mas é comumente encontrada como extensão particular de várias delas. Lógica de Programação Prof. Teresinha Letícia da Silva Biblioteca string.h strlwr Converte letras maiúsculas em minúsculas numa string. Exemplo: strlwr(s); strupr Converte letras minúsculas numa string para maiúsculas. Exemplo: strupr(s); strrev Reverte uma string. strrev muda todos os caracteres numa string para a ordem reversa, com exceção do caracter nulo de terminação Exemplo: strrev(s); Lógica de Programação Prof. Teresinha Letícia da Silva Biblioteca string.h strstr A função strstr retorna um ponteiro para a primeira ocorrência da string apontada por str2 na str1. Ela devolve um ponteiro nulo se não encontrar nenhuma ocorrência. Exemplo: strstr(str1,str2); toupper A função toupper() devolve o equivalente maiúsculo do caracter ch se ele for uma letra minúscula. Todos os outros caracteres são deixados inalterados. Lógica de ProgramaçãoProf. Teresinha Letícia da Silva Exercícios
Compartilhar