Jump to content
Dreigon Fenriz

[Resolvido] Como achar o acompanhante/par certo?

Recommended Posts

Dreigon Fenriz

Bem,Ola queria que me ajudassem com a logica do problema a seguir:

Tenho um vetor de 300 campos do tipo char e preciso retornar em uma função o local de determinado par de um caractere

Sendo

{ par= }

[ par= ]

ou seja tenho que percorrer o vetor se achar o { tenho que imprimir na tela a posição no vetor do mesmo e a posição no vetor do }

so que o problema ocorre se eu achar { e depois { ai terei que procurar o par do segundo simbolo e anula-lo para o primeiro simbolo { e depois procurar o par do primeiro simbolo { e retornar a sua posição.

Share this post


Link to post
Share on other sites
nunopicado

Então, nada como procurares o { do inicio para o fim, e procurares depois o } do fim para o inicio.

Assim não tens de te preocupar com quem lá estiver dentro.

Só tens de te certificar no fim de que a posição do } não é menor que a do {, para o caso em que no array te apareça primeiro o } e só depois o {, o que deixaria à partida de ser considerado um par.


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
passarito

Com tantas { e mais { não sei se entendi o que querias, mas aqui vai a minha opinião....

Um array, ou vector como dizes, do tipo char não nem mais nem menos que uma string, além do mais que estas são muito mais faceis de trabalhar...

Assim, essa função pode ser substituida pela função Pos que devolve a posição onde se encontra a substring que que encontrar.

Function Pos (substring,sting):byte

Share this post


Link to post
Share on other sites
nunopicado

Pensei nisso, passarito, mas a pos devolve a primeira instância encontrada, o que não resolve o problema de encontrar o par ignorando outros potenciais candidatos que apareçam lá no meio...


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
Dreigon Fenriz

Então, nada como procurares o { do inicio para o fim, e procurares depois o } do fim para o inicio.

Assim não tens de te preocupar com quem lá estiver dentro.

Só tens de te certificar no fim de que a posição do } não é menor que a do {, para o caso em que no array te apareça primeiro o } e só depois o {, o que deixaria à partida de ser considerado um par.

Mas ai aconteceria o mesmo pois se fosse assim:

{
{
}
}

eu teria que retornar o { principal e não o { que estas dentro

Share this post


Link to post
Share on other sites
nunopicado

E então, é isso mesmo...

Tens a sequencia {,{,},} nas posições 1,2,3,4 respectivamente.

Procuras { do inicio para o fim: Ele é encontrado logo na posição 1.

Depois procuras o } do fim para o principio: O primeiro que ele vai encontrar é na posição 4.

Não é isso que pretendes?


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
thoga31

@nunopicado, há um problema no teu raciocínio. Imagina:

{{}{}}{}

O par correspondente ao primeiro não é o último mas sim o antepenúltimo.

A técnica aqui é percorrer o array e ter um contador que nos vai indicando em que par estamos. Exemplo:

{  <-- cont = 1 <-- INÍCIO
{  <-- cont = 2
}  <-- cont = 1
{  <-- cont = 2
}  <-- cont = 1
}  <-- cont = 0 <-- PAR! Fim da pesquisa.
{
}

Cumprimentos.

  • Vote 1

Knowledge is free!

Share this post


Link to post
Share on other sites
nunopicado

@nunopicado, há um problema no teu raciocínio. Imagina:

{{}{}}{}

O par correspondente ao primeiro não é o último mas sim o antepenúltimo.

Certo... Mas ou percebi mal, ou o op disse que o que está no meio é para descartar!

Ou não?


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
thoga31

Certo... Mas ou percebi mal, ou o op disse que o que está no meio é para descartar!

Ou não?

Sinceramente não sei de onde subentendeste isso. Esclarece-me.


Knowledge is free!

Share this post


Link to post
Share on other sites
nunopicado

eu teria que retornar o { principal e não o { que estas dentro

Claro que aqui vai depender do que o op entende por principal.

1. Se "principal" é o conjunto {} que abranger mais símbolos, independentemente do que lá estiver dentro serem também conjuntos ou não, então o método que descrevi é suficiente.

Foi neste cenário que eu falei da necessidade de precaver se o índice do } era anterior ou posterior ao do {, algo que aconteceria com um conjunto do tipo }{}{

2. Se "principal" é o conjunto de fora, mas os conjuntos interiores terem de bater certo também, então é necessário um parser básico, algo como disse o Thoga, com um contador que começa em 0, e vai contando os abertos (soma) e os fechados (subtrai), e move-se até o contador ser 0 novamente (altura em que fecha o } correspondente ao primeiro { )


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
thoga31

Eu entendi que o OP queria descobrir o par correspondente, repara:

so que o problema ocorre se eu achar { e depois { ai terei que procurar o par do segundo simbolo e anula-lo para o primeiro simbolo { e depois procurar o par do primeiro simbolo { e retornar a sua posição.

Portanto, o OP terá de esclarecer bem a situação, mas creio que é a tua segunda situação, cuja solução passa algures por aquilo que eu referi. ;)

  • Vote 1

Knowledge is free!

Share this post


Link to post
Share on other sites
Dreigon Fenriz

Ola queria agradecer,a vocês pois estão me ajudando em um projeto que estou fazendo,mais uma vez vlw

Share this post


Link to post
Share on other sites
nunopicado

...

E então é isso...


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
thoga31

Ola queria agradecer,a vocês pois estão me ajudando em um projeto que estou fazendo,mais uma vez vlw

Tudo muito bem, é para isso que cá estamos e somos membros com todo o gosto.

Mas a nossa questão continua sem resposta... assim só mesmo por acaso...


Knowledge is free!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.