Ir ao conteúdo
  • Cadastre-se

string vazia


Visitante: silvamatheus

Posts recomendados

  • Membro VIP
o que é uma string vazia:confused:

Olá,

Não entendi muito a tua dúvida, mas vou tentar mesmo assim.

Abaixo uma sugestão.

Sobre String no Pascal.

Em fim, no Pascal uma string é basicamente uma cadeia de caracteres. Na prática como um "array [1..255] of char".

O termo "string vazia" deve está se referindo a uma variável ou a alguma estrutura do tipo string que não contém nenhum caractere armazenado, ou seja, está "vazia", ex.:

var
nome :string;
BEGIN
nome:='silva'; //a string nome contém 5 caracteres.
nome:=' '; //a string nome contém 1 caractere (um espaço)
nome:=''; //a string nome está vazia (não tem nenhum caractere)
END.

Uma implicação interessante para essa característica é por exemplo, "come ler uma string vazia???", ou seja, meu programa tem um campo que pode ficar vazio.. mas como faço para ler do console??

Outra característica é a capacidade de alocação dinâmica (ou algo do tipo).

Abaixo um exemplo que fiz demonstrando algumas dessas características.

Obs.: Usei o Turbo Pascal 7.1, mas as características podem mudar de um compilador para outro - No Pascal Zim já vi que é diferente :mellow:

Program TesteString;
uses
CRT;
var
teste :string;
tam :byte;
BEGIN
ClrScr; {limpa a tela}
{por padrão, a string é zerada quando roda}
writeln('TEXTO INSERIDO : ',teste);
{tamanho ser* 0}
writeln('TAMNAHO :',Length(teste));
{inserindo valores diretamente na posi‡ao}
teste[1]:='P';
teste[2]:='A';
teste[3]:='S';
teste[4]:='C';
teste[5]:='A';
teste[6]:='L';
{o texto inserido continuara sendo nulo... (pelo menos no Turbo Pacal n insere)}
writeln('TEXTO INSERIDO : ',teste);
{logo o tamanho continuara sendo zero}
writeln('TAMNAHO :',Length(teste));
{abaixo o valor é "atribuido", logo a string recebera os caracteres}
{na forma abaixo, a string "aumentara" de tamanho}
teste:='ABC';
{a string agora tera os caractres 'ABC'}
writeln('TEXTO INSERIDO : ',teste);
{e o tamanho sera 3}
writeln('TAMNAHO :',Length(teste));
{abaixo tenta alterar os valores pela posicao}
teste[1]:='P';
teste[2]:='A';
teste[3]:='S';
teste[4]:='C';
teste[5]:='A';
teste[6]:='L';
{somente os tres primeiros valores serao alteras, já que só existe 3}
writeln('TEXTO INSERIDO : ',teste);
{o tamanho continuara 3}
writeln('TAMNAHO :',Length(teste));
{abaixo inreri espaco no lugar}
teste[1]:=' ';
teste[2]:=' ';
teste[3]:=' ';
writeln('TEXTO INSERIDO : ',teste);
{o tamanho continuara 3 tambem (para o usuario aparentara vario, mas n esta)}
writeln('TAMNAHO :',Length(teste));
{abaixo alterei novamente o tamanho, deixando com 0 caracteres (poderia ser
qualquer outro valor (entre 0 e 255)}
teste:='';
writeln('TEXTO INSERIDO : ',teste);
{agora realmetne esta vazia}
writeln('TAMNAHO :',Length(teste));
{abaixo tenta alterar novamente pela posicao}
teste[1]:='a';
teste[2]:='b';
teste[3]:='b';
writeln('TEXTO INSERIDO : ',teste);
{vai dar no mesmo, pois esta vazia}
writeln('TAMNAHO :',Length(teste));


{ou seja, a string se comporta como um array dinamico, diferentemente do array
convencional, que já aloca todo o espaco necessario independentente de quanto
foi "atribuido" ou "usado".

o mesmo principio vale para as outras vari*veis. um integer, boolean, char,
byte, real etc, já alocarão a sua capacidade maxima, e quando o valor é
atribuido o programa simplesmente substitui o valor que esta na memoria pelo
valor novo.


Obs.: Nao sei informa se a string tambem já aloca os 255 caracteres, ou seja,
possa ser que aloque os 255 e somente dˆ acesso a medida que o codigo
"atribue" um valor maior.}

ReadKey; {pause antes de fechar}
END.

Qualquer é só postar

Abraços

Link para o comentário
Compartilhar em outros sites

Visitante: silvamatheus
 

obrigado.

mas para esclarecer minha duvida:eu quero fazer um algoritmo que é uma agenda eletronica,que tem a capacidade de armazenar ate 100 nomes.A minha difilcudade é validar se o usuario digitou um nome invalido,por exemplo varios espaços em branco(se ele apertou varias vezes a barra de espaço).:

Link para o comentário
Compartilhar em outros sites

Oi amigo, para ver quantos espaços foram digitados numa string, voce terá que fazer uma verificaçao caracter por caracter da string.

Por exemplo, se quiser evitar que hajam dois espaços consecultivos na digitaçao do usuario, pode-se fazer o seguinte:


var
nome: string; //variavel que conterá o nome digitado pelo usuario
i: integer; //variavel utilizada para verificar digitaçao dentro de um laço for
begin
{ TODO -oUser -cConsole Main : Insert code here }
writeln('Digite seu nome: ');
readln(nome); //atribui o texto digitado pelo usuario à variavel "nome"
for i:= 1 to length(nome) do //loop onde a variavel "i" varia de 1 até a quantidade de caracteres da variavel "nome"
begin
if(nome[i] = ' ')and(nome[i+1] = ' ')then //verifica se tem dois espaços consecutivos
begin
Writeln('nome invalido - dois espaços consecutivos');
break; //pára o for imediatamente
end;
end;
readln; //espera o usuario pressionar enter para sair do programa
end.

Link para o comentário
Compartilhar em outros sites

Faça uma função para verificar caracteres inválidos e use uma função que remova espaços vazios em vez de verificar espaços duplos ...

Digitar espaços duplos não seria um erro, você simplesmente poderia remover os espaços desnecessários em vez de gerar um write de alerta.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
for i:=1 to Length(nome) do

Só uma pequena correção: o correto seria "Length(nome)-1", já que o if usa "i+1".

Logo:

for i:=1 to Length(nome)-1 do

**

Abaixo aproveitei o código e fiz uma function.

uses
CRT; //carrega comandos extras, como ReadKey, ClrScr, TextColor etc
var
nome :string;

function nomeValido(nome:string):boolean;
var
i :integer;
begin
nomeValido:=true;
for i:=1 to Length(nome)-1 do
if (nome[i]=' ') and (nome[i+1]=' ') then
begin
nomeValido:=false;
break;
end;
end;

BEGIN
TextColor(15); //texto branco mais claro
TextBackGround(1); //fundo azul
repeat
ClrScr; //limpa a tela
writeln('Digite seu nome: ');
readln(nome);
if not nomeValido(nome) then
begin
writeln;
TextColor(Yellow+Blink); //Yellow = 14, Blink = 128 (cor piscando)
writeln('NOME INVALIDO (2 ou mais espaços consecutivos)');
TextColor(white); //white = 15 (dá no mesmo)
ReadKey;
end
else
break; //interrompe o loop
until false; //loop infinito
ReadKey; //pause antes de fechar (aguarda uma tecla ser pressionada)
END.

Então, é só para servir como "start", ai você vai adequando ao seu programa...

Precisa de ajudar é só postar

Abraços

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!