56
STRINGS Profª Ms. Engª Elaine Cecília Gatto Curso de Bacharelado em Engenharia de Computação Universidade do Sagrado CoraçãO – USC Bauru/SP

Linguagem C - Strings

Embed Size (px)

DESCRIPTION

Linguagem C - Strings

Citation preview

Page 1: Linguagem C - Strings

STRINGSProfª Ms. Engª Elaine Cecília GattoCurso de Bacharelado em Engenharia de ComputaçãoUniversidade do Sagrado CoraçãO – USCBauru/SP

Page 2: Linguagem C - Strings

STRINGS• São sequências, conjuntos ou cadeira de caracteres diversos,

sendo representados por aspas;• Em C não existe um tipo STRING explícito;• Não é um tipo primitivo da linguagem;• Não existe uma palavra reservada que declare uma variável do

tipo STRING (como acontece em pascal, java, etc);• Em C utiliza-se um vetor ou matriz do tipo CHAR para

armazenar uma STRING;• Mas qual o tamanho da STRING? Quando ela termina?• Utilizar um caracter terminador: \0 (null = zero) forma que

as funções reconhecem o fim da string;

Page 3: Linguagem C - Strings

STRINGS• Caracteres são blocos de montagem fundamentais dos

programas-fonte

• Cada programa é composto por uma sequencia de caracteres que, ao serem agrupados de modo significativo, são interpretados pelo computador como uma série de instruções que serão usadas na realização de tarefa

• CONSTANTE DE CARACTER: é um valor INT representado por um caracter entre aspas simples

• CONJUNTO DE CARACTERES DA MÁQUINA: exemplo o código ASCII

Page 4: Linguagem C - Strings

STRINGS• STRING: consistem em uma série de caracteres tratados como

uma únic entidade

• CARACTERES ESPECIAIS: acentos, pontuação, etc

• STRINGS LITERAIS ou CONSTANTES STRINGS: são escritas entre aspas duplas, exemplo:

• “João da Silva”• “14-2107-7000”

Page 5: Linguagem C - Strings

STRINGS• É um array de caracteres que termina no caractere ‘\0’

• O valor de uma STRING é o endereço de seu primeiro caractere

• STRINGs são acessadas por meio de um ponteiro para o primeiro caractere da STRING

• char cor[] = “azul”;• const char *corPtr = “azul”;

• char cor[] = {‘a’, ‘z’, ‘u’, ‘l’, ‘\0’}

Page 6: Linguagem C - Strings

Strings Constantes• Sempre que o compilador encontra qualquer coisa entre aspas

duplas, ele reconhece que se trata de uma string constante.

printf( “ %s ”, “ Saudações ”);Posição da memória string

1092 S

1093 A

1094 U

1095 D

1096 A

1096 C

1097 O

1098 E

1099 S

1100 \ 0

Page 7: Linguagem C - Strings

SCANF( )• É uma função da biblioteca padrão de entrada/saída• A função SCANF() lerá caracteres até que se encontre:• Espaço• Tabulação• Nova linha• Indicador de fim de arquivo

• Use %s de modo que scanf leia a quantidade de caracteres exatos que você deseja. Exemplo:

char word[20];scanf( “ %19s ”, word);

Page 8: Linguagem C - Strings

SCANF( )#include <stdio.h>#include <stdlib.h>

int main(){ char nome[100]; printf("Digite o seu nome: "); scanf("%s", nome); printf("Saudacoes, %s", nome); printf("\n "); system("PAUSE"); return 0;}

• Observe a saída do programa! Consegue notar o que há de diferente entre a entrada de dados e a saída?

Page 9: Linguagem C - Strings

SCANF( )#include <stdio.h>#include <stdlib.h>

int main(){ char nome[100]; printf("Digite o seu nome: "); scanf("%s", nome); printf("Saudacoes, %s", nome); printf("\n "); system("PAUSE"); return 0;}

• Esta instrução lê cada caractere digitado e os armazena a partir do endereço nome.

• O processo termina quando um caractere branco é encontrado.

• Nesse ponto é incluído automaticamente o caractere \0 na próxima posição livre.

• Não é permitido ultrapassar o limite estipulado na criação do vetor/matriz.

• O espaço para \0 deve ser previsto.• A função scanf() entende um espaço em

branco como o término da entrada.• Por isso, na saída, apenas o primeiro

nome digitado é apresentado.

Page 10: Linguagem C - Strings

SCANF( )#include <stdio.h>#include <stdlib.h>

int main(){ char nome[100]; printf("Digite o seu nome: "); scanf("%s", nome); printf("Saudacoes, %s", nome); printf("\n "); system("PAUSE"); return 0;}

• Mas se digitarmos o nome inteiro sem espaços, observe a saída!

• Observe esta instrução novamente. Porque está sendo usado nome e não &nome?

• Neste caso, nome é equivalente a &nome[0]

• O nome de uma matriz é o seu endereço inicial

• Scanf() é muito utilizada para ler uma mistura de tipos de dados numa mesma instrução.

Page 11: Linguagem C - Strings

SSCANF( )

INT SSCANF ( CHAR *S, CONST CHAR * FORMAT, ...);

• Equivalente a scanf• A entrada é lida a partir do array S em vez do teclado• Retorna o número de caracteres escritos em S• Retorna EOF (END-OF-FILE) se ocorrer um erro• É uma função da biblioteca padrão de

entrada/saída

• EXEMPLO, LIVRO DEITEL, 8.16

Page 12: Linguagem C - Strings

GETS( )• char *gets (char *s);

• Pede ao usuario que entre uma string, que sera armazenada na string s.

• O ponteiro que a funcao retorna é o proprio s. • gets nao é uma funcao segura. • Por que?• Porque com gets pode ocorrer um estouro da quantidade de

posicoes que foi especificada na string. • É uma função da biblioteca padrão de entrada/saída

Page 13: Linguagem C - Strings

GETS( )#include <stdio.h>#include <stdlib.h>

int main(){ char nome[100]; printf("Digite o seu nome: "); gets(nome); printf("Saudacoes, %s", nome); printf("\n "); system("PAUSE"); return 0;}

• Usada para leitura de textos ;• Propósito: ler unicamente

uma cadeia de caracteres do teclado enquano a tecla ENTER não for pressionada;

• Todos os caracteres digitados são armazenados, inclusive espaços e tabulações;

• O caractere \0 é incluído no final;

Page 14: Linguagem C - Strings

GETS( )#include <stdio.h>#include <stdlib.h>

int main(){ char nome[100]; printf("Digite o seu nome: "); gets(nome); printf("Saudacoes, %s", nome); printf("\n "); system("PAUSE"); return 0;}

• Problemas com esta função: pode armazenar caracteres além da capacidade definida;

Page 15: Linguagem C - Strings

GETS( )• Neste exemplo, é declarado

um vetor de tamanho 10, mas o nome digitado contém 20 caracteres. Observe que o vetor armazena 10 caracters a mais do que foi especificado.

• Para resolver este problema, deve-se usar FGETS()

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

int main(){ char nome[10]; printf("Exemplo de estouro de string. \n"); printf("Digite o seu nome: "); gets(nome); printf("Saudacoes, %s", nome); printf("\n "); system("PAUSE"); return 0;}

Page 16: Linguagem C - Strings

GETCHAR( )

• INT GETCHAR (VOID)

• É uma função da biblioteca padrão de entrada/saída

• Insere o caractere seguinte da entrada-padrão e o retorna como um inteiro

• A função getchar() lê um caracter e retorna um inteiro que é: • o código do caracter, ou• o valor -1 que corresponde a fim de ficheiro

Page 17: Linguagem C - Strings

GETCHAR( )/* Exemplo da utilização de getchar */#include <stdio.h>int main() { char caracter; printf("\n"); fflush(stdout); printf("Utilizando getchar()\n"); fflush(stdout); printf("--------------------\n"); fflush(stdout); printf("\n"); fflush(stdout); printf("Entre com um caracter :"); fflush(stdout); caracter = getchar(); printf("\n Você digitou o caracter %c \n\ n", caracter); fflush(stdout); return(0); }

Page 18: Linguagem C - Strings

GETCHAR( )

#include<stdio.h>main() { int c; int i=0; while((c = getchar()) != -1)

if (c == 'a') i++;printf("Foram lidos %d a\'s",i);

}

Page 19: Linguagem C - Strings

FGETS( )

• CHAR *FGETS ( CHAR *S, INT N, FILE *STREAM)

• Insere caracteres de fluxo especificado para o array S até que:• um caractere de newline seja lido, ou• fim de arquivo seja encontrado, ou• até que n-1 bytes sejam lidos

• Um caractere nulo de finalização é anexado ao array• Retorna a string que foi lida em S• É uma função da biblioteca padrão de entrada/saída

Page 20: Linguagem C - Strings

FGETS( ) • O código ao lado utiliza fgets. O vetor declarado tem 15 posições e somente essas 15 posições são preenchidas.

• Na saída, observa-se que o nome digitado é maior que as 15 posições, e portanto, o restante do nome é desprezado.

• STDIN: fluxo de entrada-padrão

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

int main(){ char nome[15]; printf("Digite o seu nome: "); fgets(nome, 15, stdin); printf("Saudacoes, %s", nome); printf("\n "); system("PAUSE"); return 0;}

Page 21: Linguagem C - Strings

PUTS( )• INT PUTS ( CONST CHAR *S )

• Imprime a string S seguida por um caractere de newline

• Retorna um inteiro diferente de zero se for bem sucedida

• Retorna um EOF se ocorrer um erro

• É uma função da biblioteca padrão de entrada/saída

Page 22: Linguagem C - Strings

PUTS( )#include <stdio.h>#include <stdlib.h>

int main(){ char nome[80]; printf("Digite o seu nome: "); gets(nome); puts(""); puts("Saudacoes, "); puts(nome); puts(""); puts("Imprimindo a partir da quarta posicao: "); puts(&nome[4]); puts(""); puts("a funcao puts() pula linha automaticamente!"); puts(""); system("PAUSE"); return 0;}

• É o complemento da função gets();

• Propósito: imprimir uma única string por vez;

• O endereço da string deve ser enviado para puts como argumento;

Page 23: Linguagem C - Strings

PUTCHAR( )• INT PUTCHAR ( INT C );

• Imprime o caracter armazenado em C e o retorna como um inteiro

• É uma função da biblioteca padrão de entrada/saída

Page 24: Linguagem C - Strings

SPRINTF( )• INT SPRINTF ( CHAR *S, CONST CHAR *FORMAT, ... );

• Equivalente a printf• A saída é armazenada no array S em vez de impressa na tela• Retorna o número de caracteres escritos em S• Retorna EOF se ocorrer um erro

• É uma função da biblioteca padrão de entrada/saída

• EXEMPLO, LIVRO DEITEL, 8.15

Page 25: Linguagem C - Strings

SPRINTF( )

#include <stdio.h>int main(){ int i; char string1[20]; printf( " Entre um valor inteiro: "); fflush(stdout); scanf("%d", &i); sprintf(string1, "Valor de i = %d", i); puts(string1); return 0;}

Page 26: Linguagem C - Strings

FGETS( ) E PUTCHAR( )#include <stdio.h>

void reverse(const char * const sPtr);

int main(){

char sentenca[80];printf(" Digite uma linha de texto: \n ");fflush(stdout);fgets(sentenca, 80, stdin);printf(" \n A linha impressa na ordem inversa é: \n ");fflush(stdout);reverse(sentenca);system("PAUSE");return 0;

}

void reverse(const char * const sPtr){if(sPtr[0] == '\0'){return;}else{reverse(&sPtr[1]); //recursãoputchar(sPtr[0]); //exibe o caractere

}}

Page 27: Linguagem C - Strings

GETCHAR( ) e PUTS( )• EXEMPLO, LIVRO DEITEL, 8.14

Page 28: Linguagem C - Strings

Inicializando stringschar nome[] = {‘E’, ‘l’, ‘a’, ‘i’, ‘n’, ‘e’, ‘\0’};char nome[] = “Elaine”;EXEMPLO:#include <stdio.h>#include <stdlib.h>

int main(){ char saudacao[]="Saudacoes, "; char nome[80]; printf(" Digite o seu nome: "); gets(nome); printf("%s%s \n", saudacao, nome); system("PAUSE"); return 0;}

Page 29: Linguagem C - Strings

STRCPY( )

• CHAR *STRCPY ( CHAR *S1, CONST CHAR *S2 );

• Copia a string s2 no array s1

• O valor de s1 é retornado

• É uma função de manipulação de strings

Page 30: Linguagem C - Strings

STRCPY( )• Copia ou atribui o conteúdo da

string de origem para a string de destino. Ambas devem ter, no mínimo, o mesmo tamanho;

• Sintaxe: strcpy(string_destino, string_origem);

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

int main(){ char nome_original[30] ; char nome_copia[30]; printf(" Digite um nome: "); gets(nome_original); strcpy(nome_copia, nome_original); printf(" Nome original: "); puts(nome_original); printf(" Nome copia: "); puts(nome_copia); system("PAUSE"); return 0;}

Page 31: Linguagem C - Strings

STRCAT( )

• CHAR *STRCAT ( CHAR *S1, CONST CHAR *S2 );

• Acrescenta a string s2 ao array s1

• O primeiro caractere de s2 sobrescreve o caractere nulo de finalização de s1

• O valor de s1 é retornado

• É uma função de manipulação de strings

Page 32: Linguagem C - Strings

STRCAT( )• Concatena o conteúdo da string

de origem ao final do conteúdo da string de destino.

• Essa função não verifica se a primeira cadeia tem espaço suficiente para que a segunda cadeia seja adicionada ao seu final.

• Sintaxe: strcat(string_destino, string origem);

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

int main(){ char cadeia1[100]; char cadeia2[10]; printf(" Digite o seu primeiro nome: "); gets(cadeia1); printf(" Digite o seu segundo nome: "); gets(cadeia2); strcat(cadeia1, cadeia2); printf("%s", cadeia1); puts(""); system("PAUSE"); return 0;}

Page 33: Linguagem C - Strings

STRNCPY( )

• Char *strncpy ( char *s1, const char *s2, size_t n )

• Copia no maximo n caracteres da string2 no array s1

• O valor de s1 é retornado

• É uma função de comparação de strings

Page 34: Linguagem C - Strings

STRCPY e STRNCPY//exemplo STRCPY E STRNCPY

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

int main(void){

char x[] = "Parabéns a você";char y[25];char z[15];

printf(" %s %s \n %s %s \n","A string no array x é: ", x,"A string no arryz y é: ", y,strcpy(y,x));

fflush(stdout);

strncpy(z, x, 14);z[14] = '\0';

printf(" A string no array z é: %s", z);fflush(stdout);

return 0;}

Page 35: Linguagem C - Strings

STRNCAT( )

• Char *STRNCAT ( char *s1, const char *s2, size_t n )

• Acrescenta no máximo n caracteres da string s2 ao array s1.

• O primeiro caractere de s2 sobrescreve o caractere nulo de finalização de s1

• O valor de s1 é retornado

• É uma função de comparação de strings

Page 36: Linguagem C - Strings

STRCMP( )

• INT STRCMP ( CONST CHAR *S1, CONST CHAR *S2 );

• Compara a string s1 com a string s2

• A função retorna 0, menor do que 0 ou maior do que 0 se s1 for igual, menor ou maior do que s2, respectivamente

• É uma função de comparação de strings

Page 37: Linguagem C - Strings

Função STRCMP( )

• Compara o conteúdo da string 1 com o conteúdo da string 2;• Retorna um número inteiro;• Se forem iguais, a função retorna zero;• Se o número retornado for menor que zero, então a

string1 é menor que a string 2;• Se o número retornado for maior que zero, então a

string1 é maior que a string2;

Page 38: Linguagem C - Strings

STRNCMP( )

• INT STRNCMP ( CONST CHAR *S1, CONST CHAR *S2, SIZE_T N );

• Compara até n caracteres da string s1 com a string s2

• A função retorna 0, o menor do que 0 ou maior do que 0 se s1 for igual, menor ou maior do que s2, respectivamente

• É uma função de comparação de strings

Page 39: Linguagem C - Strings

STRCMP( )#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){ char string1[20], string2[20]; int resultado; printf(" Digite uma palavra: "); gets(string1); printf(" Digite uma palavra: "); gets(string2); resultado = strcmp(string1, string2); if(resultado ==0 ){ puts("As strings sao iguais."); } else{ puts("As strings sao diferentes."); } system("PAUSE"); return 0;}

Page 40: Linguagem C - Strings

Função STRCMP( )

Page 41: Linguagem C - Strings

STRLEN( )

• SIZE_T STRLEN ( CONST CHAR *S );

• Determina o comprimento da string S

• O número de caracteres anteriores ao caractere nulo de finalização é retornado

Page 42: Linguagem C - Strings

Função STRLEN( )#include <stdio.h>#include <stdlib.h>#include <string.h>

int main(){ char string1[20], string2[20]; int tamanho1, tamanho2; printf(" Digite uma palavra: "); gets(string1); printf(" Digite uma palavra: "); gets(string2); tamanho1 = strlen(string1); tamanho2 = strlen(string2); printf("O tamanho da string1 e: %d", tamanho1); puts(""); printf("O tamanho da string2 e: %d", tamanho2); puts(""); system("PAUSE"); return 0;}

• Recebe como argumento o endereço de uma string e retorna o seu tamanho;

• O comprimento do vetor/matriz da string deve ser um a mais que o inteiro retornado por strlen();

• O terminador \0 não é contabilizado;

Page 43: Linguagem C - Strings

Função STRUPR( )#include <stdio.h>#include <stdlib.h>#include <string.h>

int main(){ char string[20]; printf(" \n Escreva uma palavra: "); gets(string); printf(" \n String original: %s", string); strupr(string); printf(" \n String convertida: %s", string); printf("\n\n"); system("pause"); return 0;}

• Converte o conteúdo da string em letras maiusculas

Page 44: Linguagem C - Strings

Função STRLWR( )#include <stdio.h>#include <stdlib.h>#include <string.h>

int main(){ char string[20]; printf(" \n Escreva uma palavra com todas as letras em maiusculo: "); gets(string); printf(" \n String original: %s", string); strupr(string); printf(" \n String convertida: %s", string); printf("\n\n"); system("pause"); return 0;}

• Converte o conteúdo da string em letras minusculas

Page 45: Linguagem C - Strings

Conversão de Strings• Biblioteca de utilitários gerais: stdlib.h• Convertem strings de digitos em valores inteiros e de ponto

flutuante

Double atof ( const char *nPtr ); Converte a string NPTR em double

Int atoi ( const char *nPtr ); Converte a string NPTR em int

Long atol (const char *nPtr ); Converte a string NPTR em long int

Double strtod ( const char *nPtr, char **endPtr ); Converte a string NPTR em double (** ponteiro de uma string)

Long strtol ( const char *nPtr, char **endPtr, int base );

Converte a string NPTR em long

Unsigned long strtoul ( const char *nPtr, char **endPtr, int base );

Convertea a string NPTR em unsigned long

Page 46: Linguagem C - Strings

Conversão de Strings• EXEMPLOS, LIVRO DO DEITEL

Page 47: Linguagem C - Strings

STRCHR( )

• CHAR *STRCHR ( CONST CHAR *S, INT C );

• Localiza a primeira ocorrência do caractere C na string S• Se C for encontrado, um ponteiro para C em S é

retornado• Caso contrário, um ponteiro NULL é retornado• É uma função de pesquisa• EXEMPLO 8.23, LIVRO DEITEL

Page 48: Linguagem C - Strings

STRCSPN( )

SIZE_T STRCSPN ( CONST CHAR *S1, CONST CHAR *S2 );

• Determina e retorna o tamanho do segmento incial da string s1 que consiste apenas em caracteres contidos na string s2• Exemplo 8.24, livro do deitel• É uma função de pesquisa

Page 49: Linguagem C - Strings

STRSPN( )

• SIZE_T STRSPN ( CONST CHAR *S1, CONST CHAR *S2 );

• Determina e retorna o tamanho do segmento inicial da string s1 que consiste em caracteres não contidos na string s2• Exemplo 8.27, livro deitel• É uma função de pesquisa

Page 50: Linguagem C - Strings

STRPBRK( )

CHAR *STRPBRK ( CONST CHAR *S1, CONST CHAR *S2 );

• Localiza a primeira ocorrência na string s1 de qualquer caractere na string s2• Se um caractere da string s2 for encontrado, um

ponteiro para o caractere na string s1 é retornado• Caso contário, um ponteiro NULL é retornado• É uma função de pesquisa• Exemplo 8.25, livro deitel

Page 51: Linguagem C - Strings

STRRCHR( )

• Char *strrchr ( const char *s, int c );

• Localiza a última ocorrência de C na string S• Se C for encontrado, um ponteiro para C na string S é

retornado• Caso contrário, um ponteiro NULL é retornado• É uma função de pesquisa• Exemplo 8.26, livro do deitel

Page 52: Linguagem C - Strings

STRSTR( )

• CHAR *STRSTR ( CONST CHAR *S1, CONST CHAR *S2 );

• Localiza a primeira ocorrência na string S1 da string S2• Se a string for encontrada, um ponteiro para a string

em S1 é retornado• Caso contrário, um ponteiro NULL é retornado• É uma função de pesquisa• Exemplo 8.28, livro do deitel

Page 53: Linguagem C - Strings

STRTOK( )• CHAR *STRTOK ( CHAR *S1, CONST CHAR *S2);

• Uma sequencia de chamadas para STRTOK separa a string s1 em tokens separados por caracteres contidos na string s2

• TOKENS: partes lógicas. Exemplo: palavras em uma linha de texto• A primeira chamada contém S1 como primeiro argumento, e para

que as chamadas seguintes continuem a separar tokens na mesma string, elas deverão conter NULL como primeiro argumento

• Um ponteiro para o token em vigor é retornado por cada chamada.

• Se não houve mais tokens quando a função for chamada, NULL será retornado

• É uma função de pesquisa• exemplo 8.29, livro deitel

Page 54: Linguagem C - Strings

Exercícios

1. Desenvolver um programa que obtenha as seguintes informações para os “n” colegas da sua turma de Programação de Computadores:

• Realize as seguintes tarefas:• Copie o nome do seu colega para uma variável denominada

nome2;• Concatene o sobrenome à variável nome2;

variavel qtde caracteres

nome 15

sobrenome 30

endereço 80

telefone 10

idade 3

Page 55: Linguagem C - Strings

Exercícios• Obtenha o tamanho da variável nome2;• Imprima todas as informações de cada um dos seus colegas na

tela;2. Faça um programa em C que leia 10 strings, imprima o

tamanho de cada uma delas e troque as letras para maiusculas. Dica: use o FOR.

3. Troque as letras do exercício anterior, por minusculas.4. Escreva um programa em C que receba o nome, a idade e o

sexo de 10 pessoas e armazene, em um vetor/matriz, as pessoas que forem do sexo masculino e maiores de 18 anos.

Page 56: Linguagem C - Strings

Exercícios

5. Escreva um programa que faça a seguinte pergunta ao usuário: “Quem é o criador da Linguagem C?”. O usuário deve escrever a resposta e o programa deve verificar:

• Se o usuário responder corretamente, uma mensagem de “parabéns, voce acertou!”, deve ser emitida;

• Se o usuário responder incorretamente, uma mensagem de “que pena, voce errou!”, deve ser emitida.