stringsstrings lpg – i prof. flavio marcello manipulaçãomanipulação

31
Strings Strings LPG – I Prof. Flavio Marcello Manipulação Manipulação

Upload: internet

Post on 17-Apr-2015

113 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação

StringsStringsStringsStrings

LPG – IProf. Flavio Marcello

ManipulaçãoManipulaçãoManipulaçãoManipulação

Page 2: StringsStrings LPG – I Prof. Flavio Marcello Manipulaçã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.

Page 3: StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação

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

Page 4: StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação

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.

Page 5: StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação

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);}

Page 6: StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação

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.

Page 7: StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação

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);}

Page 8: StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação

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"

Page 9: StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação

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."

Page 10: StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação

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.

Page 11: StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação

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.

Page 12: StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação

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.

Page 13: StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação

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));}

Page 14: StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação

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); }

Page 15: StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação

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); }

Page 16: StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação

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

Page 17: StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação

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");}

Page 18: StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação

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)); }

Page 19: StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação

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 é.

Page 20: StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulaçã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

Page 21: StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação

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);}

Page 22: StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação

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);}

Page 23: StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação

Manipulação de Manipulação de StringsStrings

Page 24: StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação

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)

Page 25: StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação

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);

}

Page 26: StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação

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)

Page 27: StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação

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.

Page 28: StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação

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)

Page 29: StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação

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);

}

Page 30: StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação

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

Page 31: StringsStrings LPG – I Prof. Flavio Marcello ManipulaçãoManipulação

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.