StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação.
Transcript of StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação.
StringsStringsStringsStrings
LPG – IProf. Flavio Marcello
ManipulaçãoManipulaçãoManipulaçãoManipulação
LPG-I
2
Manipulação de StringsManipulação de Strings
Em linguagem "C" não existe o tipo string. A utilização desse tipo de variável se dá através
da utilização de um cadeia de caracteres, ou seja, um vetor de caracteres terminados por um nulo (\0).
Para implementar esse tipo de dado deve-se ter sempre um caracter a mais para armazenar o terminador nulo.
LPG-I
3
Manipulação de StringsManipulação de Strings
Para declarar um tipo string:
char nome[10];
Na memória a estrutura de armazenamento que se forma é: nome
F L A V I O \0
0 1 2 3 4 5 6 7 8 9
LPG-I
4
Manipulação de StringsManipulação de StringsDeclaração de Tipos Caracteres
char sexo;char nome[35];char s[256];
sexo é uma variável que irá armazenar apenas um caractere denotado por apóstrofes ou aspas simples (ex. 'M' ou 'F').
nome é uma variável string que sustenta um máximo de 35 caracteres.
s é uma string capaz de armazenar 256 caracteres, que a linguagem C indexa de s[0] até s[255].
Como a string pode conter menos que 256 caracteres, a linguagem C usa o caractere NULL para representar o último caractere da string.
LPG-I
5Caractere NULL (\0)É responsabilidade dos programas que manipularem stringsgarantir que o caractere NULL esteja presente.
O programa a seguir, define uma string de 256 caracteres,e, depois, atribui as letras maiúsculas do alfabeto aosprimeiros vinte e seis caracteres da string:
#include "stdio.h"void main() { char s[256];
for (int i=0; i<=25; i++) s[i] = 'A' + i;
// garante o caractere “NULL” no final da cadeia s[i] = NULL; // ou s[i] = '\0';
printf("A string contém\n"); printf("%s", s);}
LPG-I
6
Manipulação de StringsManipulação de StringsPara fazer a entrada de dados utilizamos as
funções de entrada: gets(nome); // mais utilizado pois aceita
qualquer tipo de caracter.ou scanf("%20s",nome); // não aceita
espaço em branco (limitada), o 20 limita a 20 carateres, truncando a string.
Não utiliza & pois a primeira posição da string contém o endereço de memória.
LPG-I
7Operação de “leitura” de strings A função scanf() é adequada para a leitura de dados numéricos e limitada para a leitura de strings.
Para contornar este problema deve-se fazer uso da funçãode entrada de dados: gets(), pois o propósito desta função é efetuar leitura de dados do tipo string fornecidos via teclado. A função gets() aceita caracteres em branco no meio da string e coloca o caractere de controle '\0' somente quando for pressionada a tecla<ENTER>. Observe o exemplo a seguir:
#include "stdio.h"void main() { char nome[35];
printf("Digite o seu nome:\n"); gets(nome);
printf("\nSeja bem vindo, %s.", nome);}
LPG-I
8Aprendendo como 'A' difere de "A" Como foi definido, uma string de caracteres é uma seqüência de zero ou mais caracteres ASCII que a linguagem C tipicamente finaliza com NULL. Quando se trabalha com caracteres dentro de C, pode-se usar o ASCIInumérico de um caractere ou pode-se colocá-lo dentro deapóstrofes, tal como 'A'. Por outro lado, quando é usadoaspas, tal como "A", C cria uma string de caracteres quecontém a letra especificada (ou letras), e finaliza a string com o caractere NULL.
Como a linguagem C armazena de forma diferente, as constantes de caractere e string não são iguais, e énecessário tratá-las de forma diferente dentro dosprogramas.
A A \0
'A' "A"
LPG-I
9Acrescentando “aspas” em uma String Para criar uma constante string, o programa deverá colocar os caracteres desejados dentro de aspas:
"Isto é uma constante de string"
Dependendo do programa, algumas vezes uma constante string deverá conter um caractere aspas, por exemplo:
"Pare!", ele disse.
Como a linguagem C usa as aspas para delimitar as constantes string, é necessário ter uma forma de dizer aocompilador que deseja-se incluir aspas dentro da string.Para fazer isso, deve-se usar a seqüência de escape \",como demonstrado a seguir:
"\"Pare!\", ele disse."
LPG-I
10
Manipulação de StringsManipulação de Strings
Para manipular as informações armazenadas em uma string podemos utilizar as funções string ou utilizamos as funções de manipulação de caracter, já que uma string é um vetor de caracteres.
LPG-I
11
Funções de Manipulação Funções de Manipulação de Strings de Strings <string.h><string.h>
strcpy() - copia uma string em outra.
Forma Geral : strcpy (s1,s2); // copia o conteúdo de s2 em s1.
strcmp() - compara duas strings.
Forma Geral : x=strcmp(s1,s2); // menor quando s2< 0; iguais s2== 0 e maior quando s2> 0
strcat() - junta o conteúdo de duas strings.
Forma Geral : strcat(s1,s2); // s1 irá conter o resultado da junção das 2 strings.
LPG-I
12
Funções de Manipulação Funções de Manipulação de Strings de Strings <string.h><string.h>
strlen() - fornece o tamanho de uma string.Forma Geral : x=strlen(s1); // x vai conter o número
de caracteres ocupados na string .strchr() – verifica se um caracter pertence a string.Forma Geral : strschr(s1,ch); // verdadeiro se
existir o caracter ou falso se não existir.strstr() – verifica se uma string existe dentro da
outra string.Forma Geral : strstr(s1,s2); // verdadeiro se s2
existir em s1 ou falso se não existir.
LPG-I
13biblioteca <string.h>Determinando o “tamanho” de uma string Muitas das operações realizadas, em variável do tipo string, são executadas com base no número de caracteres,ou tamanho, da string. A maioria dos compiladores C fornece uma função strlen, que retorna o número decaracteres em uma string.
#include "stdio.h"#include "string.h"void main() { char nome[35] = "Flavio Marcello Strelow";
printf("%s contém %d caracteres.", nome, strlen(nome));}
LPG-I
14biblioteca <string.h>Atribuindo, ou copiando caracteresstrcpy(destino, fonte);
copia, ou atribui o conteúdo da string fonte para a
string destino.
#include "stdio.h"#include "string.h"void main() { char nome[35];
strcpy(nome, "Flavio Marcello Strelow");
printf("%s.", nome); }
LPG-I
15biblioteca <string.h>Anexando, ou concatenando caracteresstrcat(destino, fonte);
anexa, ou concatena, o conteúdo da string fonte no final
da string destino.
#include "stdio.h"#include "string.h"void main() { char nome[35] = "Flavio";
strcat(nome, " Marcello"); strcat(nome, " Strelow.");
printf("%s.", nome); }
LPG-I
16biblioteca <string.h>Coparando duas cadeias de caracteresint strcmp(s1, s2);
compara duas strings “exatamente”, ou seja, caracteres
minúsculos são considerados diferentes e maiores que
os respectivos caracteres maiúsculos.
int strcmpi(s1, s2);
compara duas strings sem “case sensitivity”, ou seja,
não diferencia caracteres minúsculos de caracteres
maiúsculos.
estas duas rotinas retornam um valor inteiro com o
resultado da comparação:
resultado < 0 se s1 < s2
resultado == 0 se s1 == s2
resultado > 0 se s1 > s2
LPG-I
17biblioteca <string.h>Coparando duas cadeias de caracteres
#include "stdio.h"#include "string.h"void main() { char s1[3] = "aaa", s2[3] = "bbb", s3[3] = "ccc";
if (strcmp(s2, s1) > 0) printf("s2 eh maior que s1.\n"); else printf("s2 eh menor que s1.\n");
if (strcmp(s2, s3) > 0) printf("s2 eh maior que s3.\n"); else printf("s2 eh menor que s3.\n");}
LPG-I
18biblioteca <string.h>Convertendo uma string para maiúsculaschar *strupr(s);
converte a string s para “maiúsculas”.
char *strlwr(s);
converte a string s para “minúsculas”.
#include "stdio.h"#include "string.h"void main() { char nome[35] = "Flavio Marcello Strelow";
printf("%s.\n", strupr(nome)); printf("%s.\n", strlwr(nome)); }
LPG-I
19
Funções de Manipulação Funções de Manipulação de Caracteres de Caracteres <ctype.h><ctype.h>
isdigit() - verifica se o caracter é um número de 0-9.Forma Geral : isdigit(a); // !=0 é número; =0 não é
número.isalpha() - verifica se o caracter é uma letra . Forma Geral : isalpha(a); // !=0 é letra; =0 não é letra.isupper() - verifica se um caracter está em maiúscula.Forma Geral : isupper(a); // !=0 é maiúscula =0 não é.islower() - verifica se um caracter está em minúscula.Forma Geral : islower(a); // !=0 é minúscula =0 não é.
LPG-I
20Funções de Manipulação Funções de Manipulação de Caracteres de Caracteres <ctype.h><ctype.h>
ispunct() - verifica se um caracter é ponto.Forma Geral : ispunct(a); // !=0 é ponto =0 não é.isspace() - verifica se um caracter é espaço. Forma Geral : isspace(a); // !=0 é espaço; =0 não é.toupper() - transforma um caracter em letra
maiúscula. Forma Geral : a=toupper(a); // o conteúdo de a em
maiúscula.tolower() - transforma um caracter em letra minúscula.Forma Geral : a=tolower(a); // o conteúdo de a em
minúscula
LPG-I
21biblioteca <string.h> e <ctype.h>Convertendo um caractere para maiúsculochar toupper(ch);
converte o caractere ch para o correspondente maiúsculo.
#include "stdio.h"#include "string.h"#include "ctype.h"void main() { char nome[35] = "Flavio Marcello Strelow"; char maiusculas[35];
for (int i=0; i<strlen(nome); i++) maiusculas[i] = toupper(nome[i]); maiusculas[i] = NULL;
printf("%s.", maiusculas);}
LPG-I
22biblioteca <string.h> e <ctype.h>Convertendo um caractere para minúsculochar tolower(ch);
converte o caractere ch para o correspondente minúsculo.
#include "stdio.h"#include "string.h"#include "ctype.h"void main() { char nome[35] = "Flavio Marcello Strelow"; char minusculas[35];
for (int i=0; i<strlen(nome); i++) minusculas[i] = tolower(nome[i]); minusculas[i] = NULL;
printf("%s.", minusculas);}
Manipulação de Manipulação de StringsStrings
LPG-I
24
Exemplo 01Exemplo 01
Determinar o tamanho de uma string.
Para determinar o tamanho de uma string use a função strlen( ). Esta função faz parte do arquivo de cabeçalho string.h. Sua sintaxe é:
strlen(string)
LPG-I
25
Exemplo 01Exemplo 01/* Determinando o tamanho de uma string usando a função strlen() */#include <stdio.h>#include <string.h>int main(){
char string[20]; printf("\n"); printf("Determinando o tamanho de uma string\n"); printf("------------------------------------\n"); printf("\n"); printf("Digite a string :"); scanf("%s",&string); printf("\n"); printf("A string tem %d carateres.\n\n",strlen(string)); return(0);
}
LPG-I
26
Exemplo 02Exemplo 02
Copiar uma string em outra .Para copiar uma string em outra use a função strcpy( ). Esta função faz parte do arquivo de cabeçalho string.h. Sua sintaxe é:
strcpy(destino, origem)
LPG-I
27
Exemplo 02Exemplo 02/* Copiando uma string em outra usando a função strcpy() */#include <stdio.h>#include <string.h>int main() {
char string1[10], string2[10]; printf(“\nCopiando uma string em outra\n"); printf("----------------------------\n\n"); printf("Digite string1 :"); scanf("%s",&string1); printf(“\nstring1 = %s\n",string1); printf("string2 = %s\n",strcpy(string2,string1)); return(0);
}//Na prática, todo conteúdo de string2 é substituído por string1.
LPG-I
28
Exemplo 03Exemplo 03
Invertendo uma string utilizando a função strrev( ) .
Para inverter o conteúdo de uma string use a função strrev( ). Ela faz parte do arquivo de cabeçalho string.h. Sua sintaxe é:
strrev(string)
LPG-I
29
Exemplo 03Exemplo 03/* Invertendo uma string usando a função strrev() */#include <stdio.h>#include <string.h>int main() {
char string[20]; printf(“\nInvertendo uma string\n"); printf("---------------------\n"); printf("\n"); printf("Entre com a string :"); scanf("%s",&string); printf("\n"); printf("Invertendo ==> %s",strrev(string)); return(0);
}
LPG-I
30
Strings- Exercício em ClasseStrings- Exercício em Classe
Exercício 1: Dadas duas palavras diferentes, o programa deverá executar os tópicos a seguir:
a) obter o número de caracteres de cada uma das palavras;
b) descobrir qual a menor palavra ou indicar se são do mesmo tamanho
c) juntar as duas strings em uma variável auxiliar
d) copiar a 2a string na 1a string
LPG-I
31
Strings- Exercício em ClasseStrings- Exercício em Classe
Exercício 2: Leia uma string e substitua os seus caracteres por: L – quando for letra, E – quando for espaço, P – quando for ponto e N – quando for número.
Exercício 3: Leia um numero com string e converta para float e int. Faca a impressão dos valores, após, converta o valor float para string e o valor int para string, apresentando os valores.