Strings
Manipulação
LPG – I
Prof. Flavio Marcello
2
Manipulaçã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.
LPG-I
3
Manipulação de Strings
Para declarar um tipo string:
char nome[10];
Na memória a estrutura
armazenamento que se forma é:
nome
F
0
LPG-I
L
1
A
2
V
3
I
4
O
5
\0
6 7
8
9
de
4
Manipulação de Strings
Declaraçã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.
LPG-I
Caractere NULL (\0)
É responsabilidade dos programas que manipularem strings
garantir 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 aos
primeiros 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);
}
LPG-I
5
6
Manipulação de Strings
Para 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.
LPG-I
Operaçã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ção
de 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);
}
LPG-I
7
Aprendendo 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 ASCII
numérico de um caractere ou pode-se colocá-lo dentro de
apóstrofes, tal como 'A'. Por outro lado, quando é usado
aspas, tal como "A", C cria uma string de caracteres que
contém a letra especificada (ou letras), e finaliza a
string com o caractere NULL.
A
'A'
A
\0
"A"
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 dos
programas.
LPG-I
8
Acrescentando “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 ao
compilador 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."
LPG-I
9
10
Manipulaçã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.
LPG-I
Funções de Manipulação de
Strings <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.
LPG-I
11
Funções de Manipulação de
Strings <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.
LPG-I
12
biblioteca <string.h>
Determinando o “tamanho” de uma string
13
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 de
caracteres 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));
}
LPG-I
biblioteca <string.h>
Atribuindo, ou copiando caracteres
strcpy(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);
}
LPG-I
14
biblioteca <string.h>
Anexando, ou concatenando caracteres
strcat(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);
}
LPG-I
15
biblioteca <string.h>
Coparando duas cadeias de caracteres
int 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
LPG-I
16
biblioteca <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");
}
LPG-I
17
biblioteca <string.h>
Convertendo uma string para maiúsculas
char *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));
}
LPG-I
18
Funções de Manipulação de
Caracteres <ctype.h>
19
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 é.
LPG-I
Funções de Manipulação de
Caracteres <ctype.h>
20
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
LPG-I
biblioteca <string.h> e <ctype.h>
Convertendo um caractere para maiúsculo
char 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);
}
LPG-I
21
biblioteca <string.h> e <ctype.h>
Convertendo um caractere para minúsculo
char 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);
}
LPG-I
22
Manipulação de Strings
24
Exemplo 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)
LPG-I
25
Exemplo 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);
}
LPG-I
26
Exemplo 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)
LPG-I
27
Exemplo 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.
LPG-I
28
Exemplo 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)
LPG-I
29
Exemplo 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);
}
LPG-I
30
Strings- 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
LPG-I
31
Strings- 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.
LPG-I
Download

de uma string