Linguagem C Strings Strings em Linguagem C Definio

  • Slides: 16
Download presentation
Linguagem C Strings

Linguagem C Strings

Strings em Linguagem “C” • Definição de string – Strings são seqüências de caracteres

Strings em Linguagem “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”. – 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 ).

Strings em Linguagem “C” • Declaração de string • Um vetor em C que

Strings em Linguagem “C” • Declaração de string • Um vetor em C que pretenda armazenar uma string n caracteres deve ser alocado com n+1 posições do tipo char para conter o terminador de string. A inicialização de uma string pode ser efetuada com o uso de uma seqüência de caracteres entre aspas. • Exemplos de declarações de string: char frase[] = “Primeira string”; /*Inicialização sem a dimensão */ char frase[16] = “Primeira string”; char frase[6] = {‘T’, ‘e’, ‘s’, ‘t’, ‘e’, 0); /* inicializado como um vetor de caracteres comum, ‘forçando’ o caracter terminador */ • No caso do primeiro e do segundo exemplo, a representação do vetor da string frase é: ‘P’ ‘r’ ‘i’ ‘m’ ‘e’ ‘i’ ‘r’ ‘a’ ‘’ ‘s‘ ‘t’ ‘r’ ‘i’ ‘n’ ‘g’ 0 • Onde cada posição representa um byte de memória (tamanho de um char).

Strings em Linguagem “C” • Strings e Ponteiros • Vetores em C são armazenados

Strings em Linguagem “C” • Strings e Ponteiros • Vetores em C são armazenados em memória a partir de um “endereço base”; • Strings são vetores de caracteres, portanto também possuem este endereço; char String 1[11] = “Hello World”; H e l l o W o r l d n n+1 n+2 n+3 n+4 n+5 n+6 n+7 n+8 n+9 n+10 n+11 n String 1 • String 1 é um “Ponteiro” para a área de memória iniciada na posição “n”. Esta área de memória possui 11 posições (sempre reservar uma posição para o código de finalização de string (, código ASCII zero)

“Ponteiros” em Linguagem C • As variáveis do tipo vetor (ou string) e matriz

“Ponteiros” em Linguagem C • As variáveis do tipo vetor (ou string) e matriz são, na verdade, “ponteiros” ou “apontadores” para áreas de memória onde os dados são armazenados; • Um “ponteiro” é uma variável que armazena o endereço de uma posição da memória do computador; • Assim, a variável String 1 “aponta” para a primeira posição onde é armazenado o vetor de caracteres (neste caso, o endereço de memória n) • Para identificar que se deseja utilizar os dados “apontados” por um ponteiro, utiliza-se o operador asterisco (*) na frente do nome da variável do tipo “ponteiro”; • Assim, a variável String 1 possui o valor n, e *String 1 representa a área de memória que inicia na posição n !!!!

Strings em Linguagem “C” • Operações sobre string • String não é um tipo

Strings em Linguagem “C” • Operações sobre string • String não é um tipo primitivo da linguagem C, por isso as seguintes operações NÃO são válidas: char str 1[10]; char str 2[] = “Palavra 2”; str 1 = str 2 /* ERRO! Não copia str 2 em str 1 */ if (str 1 == str 2) /* ERRO! Não compara str 1 com str 2 */ { …. } • Para operar sobre strings são utilizadas funções da biblioteca string. h. • Dezenas de funções com diversas variações. . .

Strings em Linguagem “C” • strlen • Protótipo: int strlen (char *string) • Descrição:

Strings em Linguagem “C” • strlen • Protótipo: int strlen (char *string) • Descrição: Retorna o número de caracteres de uma string (exceto o caractere de fim de string). • Exemplo: char nome[] = “Fulano”; printf (“O nome possui %d letras”, strlen (nome)); . . .

Strings em Linguagem “C” • strcpy • Protótipo: char *strcpy (char *string 1, char

Strings em Linguagem “C” • strcpy • Protótipo: char *strcpy (char *string 1, char *string 2) • Descrição: Copia o conteúdo de string 2 em string 1 e retorna o endereço de string. • Exemplo: char str 1[10]; char str 2[] = “Palavra”; strcpy (str 1, str 2); /* Agora str 1 também contém “Palavra” */

Strings em Linguagem “C” • strcmp • Protótipo: int strcmp (char *string 1, char

Strings em Linguagem “C” • strcmp • Protótipo: int strcmp (char *string 1, char *string 2) • Descrição: Compara os conteúdos de string 1 e string 2 caracter a caracter e retorna – 0 se string 1 = string 2 – <0 se string 1 < string 2 – >0 se string 1 > string 2 • Exemplo: char nome 1[] = “Fulano” char nome 2[] = “Beltrano”; if (strcmp (nome 1, nome 2) == 0) {printf (“Nomes são iguais”); } else {printf (“Nomes são diferentes); }

Strings em Linguagem “C” • strcat • Protótipo: strcat (char *string_destino, char *string_origem) •

Strings em Linguagem “C” • strcat • Protótipo: strcat (char *string_destino, char *string_origem) • Descrição: Concatena os conteúdos de string 1 e string 2 • Exemplo: char nome 1[] = “Fulano” char nome 2[] = “da Silva”; char nome_completo[30]=“”; strcat(nome_completo, nome 1); printf (“%sn”, nome_completo); strcat(nome_completo, nome 2); printf (“%sn”, nome_completo); Este programa imprimirá: Fulano da Silva

Strings em Linguagem “C” • atoi (ascii to int – texto para número -

Strings em Linguagem “C” • atoi (ascii to int – texto para número - necessita #include <stdlib. h>) • Protótipo: int atoi(char *string) • Descrição: Converte o string em um número inteiro • Exemplo: int a; a = atoi(“ 10”); • atof (ascii to float – converte texto para números reais-float) • Protótipo: double atof(char *string) • Descrição: Converte o string em um número em ponto flutuante(double) • Exemplo: double d; d = atof(“ 101. 15”);

Strings em Linguagem “C” • gets (necessita #include <stdio. h>) • Protótipo: void gets

Strings em Linguagem “C” • gets (necessita #include <stdio. h>) • Protótipo: void gets (char *string 1) • Descrição: Recebe uma string via teclado e armazena em string 1. Os caracteres são armazenados até que o enter seja pressionado. • Exemplo: char nome[10]; gets (nome);

Strings em Linguagem “C” • Observações: a função gets() permite que o usuário forneça

Strings em Linguagem “C” • Observações: a função gets() permite que o usuário forneça mais caracteres do que os que podem ser armazenados no vetor(o que pode causar um erro). Para evitar este problema, pode-se utilizar a função fgets: char nome[10]; fgets(nome, 10, stdin); /* ‘stdin’ é um arquivo aberto por padrão, relacionado aos dados digitados via teclado */ • No exemplo mostrado, fgets receberia 9 caracteres (ou até que o usuário teclasse enter) e armazenaria os dados digitados na string nome, adicionando o caracter terminador de string. É importante observar que, caso o usuário digitasse enter antes de 9 caracteres, o caracter de nova linha (‘n’) também seria armazenado no vetor. scanf (“%s”, str); /* Recebe uma string até que o primeiro espaço seja inserido */

Funções em Linguagem “C” • Exercício 1: – Criar um programa capaz de calcular

Funções em Linguagem “C” • Exercício 1: – Criar um programa capaz de calcular o tempo entre dois horários quaisquer de um determinado dia. – O programa deve ler dois horários, no formato HH: MM: SS(dois dígitos para hora, dois para minutos e dois para segundos). O programa deve verificar se o horário é válido(HH entre 00 e 23, MM entre 00 e 59, SS entre 00 e 59). – O programa deve ter uma função para calcular a quantidade de segundos em um horário, e outra função para calcular e imprimir a quantidade de horas, minutos e segundos em uma quantidade de segundos;

Funções em Linguagem “C” • Exercício 2: • Faça um programa que dadas 2

Funções em Linguagem “C” • Exercício 2: • Faça um programa que dadas 2 palavras, determine: – Se as palavras são iguais; – Caso as palavras sejam diferentes, qual delas tem maior comprimento (não esquecer a possibilidade de existirem palavras diferentes de mesmo tamanho); – Verifique se a segunda palavra é uma sub string da primeira: – Exemplo: Palavra 1= casamento Palavra 2 = casa

Funções em Linguagem “C” • Exercício 3: • Faça um programa que leia 10

Funções em Linguagem “C” • Exercício 3: • Faça um programa que leia 10 nomes completos do teclado, e ao final apresente uma listagem dos nomes no formato: – Sobrenome, Primeiro_Nome; Exemplo: João Alberto Fabro José da Silva Josué dos Santos ------------Fabro, João Silva, José Santos, Josué