cap. 10 —strings stringsagomes/programacao/teoricas/10-strings.pdfstrings ‘\0’: carácter...

12
Strings Programação 13205: Engenharia Informática 13901: Matemática e Aplicações Cap. 10 — Strings

Upload: others

Post on 08-Sep-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Cap. 10 —Strings Stringsagomes/programacao/teoricas/10-strings.pdfStrings ‘\0’: carácter terminador de string • Problema: – Há que saber onde termina a string, visto que

Strings

Programação13205: Engenharia Informática13901: Matemática e Aplicações

Cap. 10 — Strings

Page 2: Cap. 10 —Strings Stringsagomes/programacao/teoricas/10-strings.pdfStrings ‘\0’: carácter terminador de string • Problema: – Há que saber onde termina a string, visto que

Strings

Sumário:

• O que é uma string?

• Caracteres versus strings

• Declaração de strings

• Carácter terminador ‘\0’

• Inicialização de strings

• Arrays versus strings

• Leitura e escrita de strings

• Passagem de strings para funções

• Principais funções de manipulação de strings

Page 3: Cap. 10 —Strings Stringsagomes/programacao/teoricas/10-strings.pdfStrings ‘\0’: carácter terminador de string • Problema: – Há que saber onde termina a string, visto que

Strings

String: definição

• É um tipo de dados composto definido através dum array de caracteres.

• Exemplos (literais ou constantes):

– “Programação continua no 2º semestre!”

– “Amélia”

– “2001-Odisseia no CyberSpace”

– “Z”

• Caracteres versus strings: ‘A’ ≠ “A”

- carácter ´A´- 1 byte

- string “A”- 2 bytes

Page 4: Cap. 10 —Strings Stringsagomes/programacao/teoricas/10-strings.pdfStrings ‘\0’: carácter terminador de string • Problema: – Há que saber onde termina a string, visto que

Strings

‘\0’ : carácter terminador de string

• Problema:

– Há que saber onde termina a string, visto que a string pode ter um número de caracteres inferior ao tamanho do array que a contém.

• Solução:

– Utilizar um carácter terminador (´\0´) que é o primeiro carácter da tabela ASCII.

Exemplo:Declaração dum array que contém uma string com 20 caracteres úteis.

char s[21]; // 20 caracteres + 1 para o terminador

Page 5: Cap. 10 —Strings Stringsagomes/programacao/teoricas/10-strings.pdfStrings ‘\0’: carácter terminador de string • Problema: – Há que saber onde termina a string, visto que

Strings

Declaração e inicialização de strings

5

Exemplo 1 (tamanho pré-definido do array ):

char s[20] = “Alberto”; //7 chars + 1 char terminadorchar s[20] = {´A´,´l´,´b´,´e´,´r´,´t´,´o´};// idem

Exemplo 2 (tamanho indefinido do array ):

char s[] = “Alberto”; // equiv. a s[7+1] = “Alberto”char *s = “Alberto”; // idem

ATENÇÃO: O nome da variável s funciona como um endereço em qualquer dos exemplos acima indicados! Portanto, não é possível usar o operador de atribuição em strings, excepto na inicialização.

Page 6: Cap. 10 —Strings Stringsagomes/programacao/teoricas/10-strings.pdfStrings ‘\0’: carácter terminador de string • Problema: – Há que saber onde termina a string, visto que

Strings

Arrays vs. strings

6

Exemplo (tamanho indefinido do array ):

char s[] = “Alberto”; // exemplo duma string

Contra-exemplo (tamanho indefinido do array ):

char s[] = {´A´,´l´,´b´,´e´,´r´,´t´,´o´}; // não é string

ATENÇÃO:- Uma string é um array de caracteres com um carácter especial como terminador

(´\0´).- Nem todo o array de caracteres é uma string.

Page 7: Cap. 10 —Strings Stringsagomes/programacao/teoricas/10-strings.pdfStrings ‘\0’: carácter terminador de string • Problema: – Há que saber onde termina a string, visto que

Strings

Escrita de strings

• Funções de escrita:

– printf

– puts

7

#include <stdio.h>

int main(void){printf(“Num dia de chuva não há gota que se esgote\n”);puts(“Num dia de chuva não há gota que se esgote”);return 0;

}

ATENÇÃO: A função puts é equivalente à função printf + \n, mas só na saída duma string.

Page 8: Cap. 10 —Strings Stringsagomes/programacao/teoricas/10-strings.pdfStrings ‘\0’: carácter terminador de string • Problema: – Há que saber onde termina a string, visto que

Strings

Leitura de strings

• Funções de leitura:

– scanf

– gets

8

#include <stdio.h>int main(){

char nome[20];char apelido[15];printf(“Escreva o Nome: ”); scanf(“%s”,nome);printf(“Escreva o Apelido: ”); scanf(“%s”,apelido);printf(“Nome completo: %s %s \n”, nome, apelido);return 0;

}

ATENÇÃO: • A função scanf não usa o operador & na leitura de strings.• A função scanf só permite ler uma palavra.• A função gets permite ler strings com mais de uma palavra.

Page 9: Cap. 10 —Strings Stringsagomes/programacao/teoricas/10-strings.pdfStrings ‘\0’: carácter terminador de string • Problema: – Há que saber onde termina a string, visto que

Strings

Leitura de strings com gets

9

#include <stdio.h>

int main(){

char nome_completo[50];

printf(“Escreva o nome completo: ”); gets(nome_completo);printf(“Nome completo: %s \n”, nome_completo);

return 0;}

Page 10: Cap. 10 —Strings Stringsagomes/programacao/teoricas/10-strings.pdfStrings ‘\0’: carácter terminador de string • Problema: – Há que saber onde termina a string, visto que

Strings

Passagem de strings para funções

É igual à passagem de arrays para funções, uma vez que uma string é um array de caracteres.

Page 11: Cap. 10 —Strings Stringsagomes/programacao/teoricas/10-strings.pdfStrings ‘\0’: carácter terminador de string • Problema: – Há que saber onde termina a string, visto que

Strings

Principais funções de manipulação de strings

11

// compara alfabeticamente duas stringsint strcmp(const char *s1, const char *s2);

// copia uma string para outrachar *strcpy(char *dest, const char *orig);

// devolve comprimento duma stringint strlen(const char *s);

// concatena duas stringschar *strcat(char *dest, const char *orig);

// devolve o endereço da primeira ocorrência dum carácterchar *strchr (const char *s, char ch);

// devolve o endereço da última ocorr. dum carácterchar *strrchr (const char *s, char ch);

strings.h O código objecto das funções declaradas em string.h encontra-se na biblioteca libC.

Page 12: Cap. 10 —Strings Stringsagomes/programacao/teoricas/10-strings.pdfStrings ‘\0’: carácter terminador de string • Problema: – Há que saber onde termina a string, visto que

Strings

A palavra reservada const na passagem de parâmetros de uma função

FIM12

// copia uma string para outrachar *strcpy(char *dest, const char *orig);

Exemplo:

A palavra reservada const impede que a string apontada por orig seja alterada dentro da função strcpy, ou seja, impede o efeito lateral de alteração através de apontadores.