strings - instituto superior técnico: serviço de...

17
Strings 1 Universidade Metodista de Angola, Departamento de Engenharias Introdução Definição de strings. Criação/Declaração de strings. Inicialização de strings. Manipulação de strings. Exemplos.

Upload: hathien

Post on 20-Jan-2019

214 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Strings - Instituto Superior Técnico: Serviço de …web.ist.utl.pt/ist153068/ficheiros/teoricas/Programacao...a concatenação das duas strings, e usar as funções predefinidas

Strings

1Universidade Metodista de Angola, Departamento de Engenharias

• Introdução

• Definição de strings.

• Criação/Declaração de strings.

• Inicialização de strings.

• Manipulação de strings.

• Exemplos.

Page 2: Strings - Instituto Superior Técnico: Serviço de …web.ist.utl.pt/ist153068/ficheiros/teoricas/Programacao...a concatenação das duas strings, e usar as funções predefinidas

• Uma string é uma sequência, um conjunto, ou uma cadeia de caracteres.

• Uma string é um conjunto de caracteres armazenados num vector de caracteres, cujo o ultimo elemento é o carácter nulo ‘\0’.

• Uma string é um vector de caracteres terminado com o carácter nulo– O carácter nulo é o carácter cujo o codigo ASCII vale 0.– O carácter nulo também é representado por ‘\0’.

• As strings são tipo de dados não primitivos da linguagem C para guardar uma palavra.

• Lembre-se que os tipos de dados básicos ou primitivos em linguagel C são: int, float, double e char.

Strings

2Universidade Metodista de Angola, Departamento de Engenharias

definições

Page 3: Strings - Instituto Superior Técnico: Serviço de …web.ist.utl.pt/ist153068/ficheiros/teoricas/Programacao...a concatenação das duas strings, e usar as funções predefinidas

Strings

3Universidade Metodista de Angola, Departamento de Engenharias

Tabela ASCII - American Standard Code Information Interchange

Page 4: Strings - Instituto Superior Técnico: Serviço de …web.ist.utl.pt/ist153068/ficheiros/teoricas/Programacao...a concatenação das duas strings, e usar as funções predefinidas

• Tal como nas variáveis e vectores– Uma string pode ser inicializada no momento da sua criação.– Uma string pode ser inicializada após a sua criação.

Strings

4Universidade Metodista de Angola, Departamento de Engenharias

Declaração e inicialização de strings

Exemplo de declaração e inicialização de strings

char str1[12] = “Gustavo”;

char str2[ ] = “Edna”;

char str3[4] = “Campos”; /* dá erro */

Ao efectuar essa operação o caracter ‘\0’ é colocado automaticamente

no final da cadeia de caracteres

Page 5: Strings - Instituto Superior Técnico: Serviço de …web.ist.utl.pt/ist153068/ficheiros/teoricas/Programacao...a concatenação das duas strings, e usar as funções predefinidas

Strings

5Universidade Metodista de Angola, Departamento de Engenharias

char str1[ 12 ] = “Gustavo”;

Exemplo de declaração e inicialização de strings

Conjunto de caracteres a ser atribuído ao vector str1

Tamanho do vector str1Nome do vector

Tipo de vector, as strings são vectores de caracteres

Page 6: Strings - Instituto Superior Técnico: Serviço de …web.ist.utl.pt/ist153068/ficheiros/teoricas/Programacao...a concatenação das duas strings, e usar as funções predefinidas

Strings

6Universidade Metodista de Angola, Departamento de Engenharias

Exemplo de declaração e inicialização de stringschar str1[12] = “Gustavo”;

char str2[ ] = “Edna”;

char str3[4] = “Campos”;

‘G’ ‘\0’‘\0’‘o’‘v’‘a’‘t’‘s’‘u’

0 7654321 8

‘\0’‘\0’‘\0’

109 11

st1

O compilador reserva 12 posições de memóriaComo a cadeia “Gustavo” tem 7 caracteres, esse caracteres são guardados nas12 posições, e as restantes posições serão inicializadas automaticamente pelo carácter ‘\0’

O compilador reserva 4 + 1 posição de memória 4 posições para guardar os caracteres “Edna” e 1 posição para guardar o carácter ‘\0’

Dá erro de compilação, O tamanho da cadeia de vectores é maior que o número de posições de memoria reservadasReservou-se 4 posições de memória, mas a cadeia “Campos” contem 6 caracteres

Page 7: Strings - Instituto Superior Técnico: Serviço de …web.ist.utl.pt/ist153068/ficheiros/teoricas/Programacao...a concatenação das duas strings, e usar as funções predefinidas

Strings

7Universidade Metodista de Angola, Departamento de Engenharias

Exemplo de declaração e inicialização de strings

char numero[5] = “2009”; vs int num = 2009;

O caracter ‘\0’ é usado para representar o fim da string

Algumas Dicas

A variável numero ocupa 5 bytes

em memória 4 + 1.

A variável num ocupa 4 bytes

em memória.

char str[ ] = “A”; vs char ch = ‘A’;

str ocupa 2 bytes ,

caracter ’A’ , 1 byte

caracter ‘\0’ , 1 byte

ch ocupa 1 bytes ,

Page 8: Strings - Instituto Superior Técnico: Serviço de …web.ist.utl.pt/ist153068/ficheiros/teoricas/Programacao...a concatenação das duas strings, e usar as funções predefinidas

• Existem funções para leitura de strings do teclado:

– gets() : get string

– scanf() : scan formated

• Existem funções para escrita de strings no ecrã:

– puts() : put string

– printf() : print formated

Strings

8Universidade Metodista de Angola, Departamento de Engenharias

Page 9: Strings - Instituto Superior Técnico: Serviço de …web.ist.utl.pt/ist153068/ficheiros/teoricas/Programacao...a concatenação das duas strings, e usar as funções predefinidas

Strings

9Universidade Metodista de Angola, Departamento de Engenharias

#include <stdio.h>#include <stdlib.h>

int main(){/*declarações de variáveis*/

char str[10];

puts(“insira uma string: ”);gets(str);puts(“a string insirida é: ”);puts(str);

exit(0);}

Exemplo de um programa que lê uma string do teclado e imprime a string no ecrã

#include <stdio.h>#include <stdlib.h>

int main(){/*declarações de variáveis*/

char str[10];

printf(“insira uma string: ”);

scanf(“%s”, str);

print(“a string insirida é: ”);

printf(“%s”,str);

exit(0);}

Exemplo usando as funções gets e puts Exemplo usando as funções scanf e printf

Não tem o símbolo & “%s” permite imprimir uma string

Imprime a cadeia de caracteres Lê a cadeia de caracteres

Page 10: Strings - Instituto Superior Técnico: Serviço de …web.ist.utl.pt/ist153068/ficheiros/teoricas/Programacao...a concatenação das duas strings, e usar as funções predefinidas

Strings

10Universidade Metodista de Angola, Departamento de Engenharias

• Existem varias funções para manipulação de strings predefinidas em linguagem C.

• A manipulação de strings envolve o seguinte:– Determinar o comprimento da string.– Copiar uma string para uma outra posição de memória.– Concatenar ou juntar strings.– Comparação de duas strings– Procurar um caracter dentro de uma string– Procurar uma substring dentro de uma string– Etc.

• Para usar essas funções o programador deve incluir a directiva #include <string.h>

Manipulação de strings

Page 11: Strings - Instituto Superior Técnico: Serviço de …web.ist.utl.pt/ist153068/ficheiros/teoricas/Programacao...a concatenação das duas strings, e usar as funções predefinidas

• As funções mais utilizadas para manipulação de stringspredefinidas em linguagem C são as seguintes:– strlen - string lenght - calcula o comprimento de uma string

– strcpy - string copy - cópia de uma string para outra

– strcat - string concatenation - concatenação de strings

– strcmp - string compare - comparação de strings

– strstr - substring over string - verifica a

– Etc.

Strings

11Universidade Metodista de Angola, Departamento de Engenharias

Manipulação de strings

Page 12: Strings - Instituto Superior Técnico: Serviço de …web.ist.utl.pt/ist153068/ficheiros/teoricas/Programacao...a concatenação das duas strings, e usar as funções predefinidas

Strings

12Universidade Metodista de Angola, Departamento de Engenharias

A tabela que se segue apresenta algumas funções predefinidas em linguagem C incluindo

algumas funções de manipulação de strings.

Nome da função Tipo de argumento e retorno Directiva

pow float pow(float x, float y){/* . . Código . . */}

#include <math.h>

putchar int putchar(int ch){/* . . Código . . */}

#include <stdio.h>

exit void exit(int code){/* . . Código . . */}

#include <stdlib.h>

strlen int strlen(char *s){/* . . Código . . */}

#include <string.h>

strcpy char *strcpy(char *dest, char *orig){/* . . Código . . */}

#include <string.h>

strcat char *strcat(char *dest, char *orig){/* . . Código . . */}

#include <string.h>

Page 13: Strings - Instituto Superior Técnico: Serviço de …web.ist.utl.pt/ist153068/ficheiros/teoricas/Programacao...a concatenação das duas strings, e usar as funções predefinidas

Strings

13Universidade Metodista de Angola, Departamento de Engenharias

As funções já estão predefinidas.

Segundo a teoria das funções, não é importante saber o conteúdo ou o código de cada função

predefinida, mas sim o que cada função faz.

Função strlen

Recebe uma string e devolve o tamanho da string ou seja o número de caracteres que constitui

a string excluindo o caracter ‘\0’.

Exemplo: strlen(“Gustavo”); devolve o inteiro 7.

Nome da função Tipo de argumento e retorno Directiva

strcmp int strmcp(char *str1, char *str2){/* . . Código . . */}

#include <string.h>

strstr char *strstr(char *str1, char *str2){/* . . Código . . */}

#include <string.h>

Page 14: Strings - Instituto Superior Técnico: Serviço de …web.ist.utl.pt/ist153068/ficheiros/teoricas/Programacao...a concatenação das duas strings, e usar as funções predefinidas

Strings

14Universidade Metodista de Angola, Departamento de Engenharias

Função strcpy

Essa função permite copiar a string orig para a string dest.

Exemplo:

char nome[12]; /*declaração da string*/

strcpy(nome, “Gustavo”); /*a cadeia de caracteres “Gustavo” é copiada para string nome*/

Função strcat

Essa função permite concatenar a string orig com a string dest e o resultado da concatenação é

guardado na string dest .

Exemplo:

char nome[12] = “Edna”; /*declaração da string*/

strcat(nome, “Ximbi”); /*a cadeia de caracteres resultante será “EdnaXimbi” e será guardada na

variavel nome*/

Page 15: Strings - Instituto Superior Técnico: Serviço de …web.ist.utl.pt/ist153068/ficheiros/teoricas/Programacao...a concatenação das duas strings, e usar as funções predefinidas

Strings

15Universidade Metodista de Angola, Departamento de Engenharias

Função strcmp

Essa função permite comparar duas strings.

A função devolve um inteiro negativo se str1 for menor alfabeticamente em relação a str2.

A função devolve 0 (zero) se str1 for igual a str2.

A função devolve um inteiro positivo se str1 for maior alfabeticamente em relação a str2.

Exemplo:

char nome1[12]=“Gustavo”; /*declaração da string*/

char nome2[12]=“Campos”; /*declaração da string*/

int numero;

strcmp(nome1, nome2); /*devolve um número positivo*/

strcmp(nome1, nome1); /*devolve 0*/

strcmp(nome2, nome1); /*devolve um número negativo*/

Page 16: Strings - Instituto Superior Técnico: Serviço de …web.ist.utl.pt/ist153068/ficheiros/teoricas/Programacao...a concatenação das duas strings, e usar as funções predefinidas

Strings

16Universidade Metodista de Angola, Departamento de Engenharias

Exemplo de manipulação de strings

Escreva um programa em Linguagem C que executa as seguinte operações:1. Lê dois nomes do teclado.

2. Apresenta quantos caracteres cada nome possui.

3. Imprime os dois nomes no ecrã por ordem alfabética.

4. Apresenta a concatenação das duas strings/nomes no ecrã.

Solução:

Criar duas strings para guardar os dois nomes a ser lidos, criar uma terceira string para guardar

a concatenação das duas strings, e usar as funções predefinidas de manipulação de strings.

1. Podemos usar as funções gets ou scanf para ler as duas strings do teclado.

2. Podemos uar a função strlen para calcular o tamanho de cada string.

3. Podemos usar a função strcmp para determinar qual das strings é maior por ordem alfabetica.

4. Podemos usar a função strcat para concatenar as duas strings no ecrã.

Page 17: Strings - Instituto Superior Técnico: Serviço de …web.ist.utl.pt/ist153068/ficheiros/teoricas/Programacao...a concatenação das duas strings, e usar as funções predefinidas

Strings

17Universidade Metodista de Angola, Departamento de Engenharias

#include <stdio.h>#include <stdlib.h>#include <string.h>

int main(){/*Declaração das strings*/char nome1[10];char nome2[10];int tamanho1;int n;/*Leitura dos dois nomes do teclado*/printf(“insira um nome: ”);scanf(“%s”,nome1);printf(“a string insirida é: ”);scanf(“%s”,nome2);/*Calculo do tamanho das strings*/tamanho1 = strlen(nome1);printf(“\ntamanho 1: %d”,tamanho1);printf(“\ntamanho 2: %d”,strlen(nome2));/*Escrever os nomes por ordem alfabéticas*/n = strcmp(nome1,nome2); if(n > 0)printf(“%s\n%s”,nome2,nome1);

elseprintf(“%s\n%s”,nome1,nome2);

/*Concatenação de strings*/strcat(nome1,nome2); printf(“%s\n”,nome1);

exit(0);