definir variável como no kylix [RESOLVIDO]

1. definir variável como no kylix [RESOLVIDO]

Geraldo José Ferreira Chagas Júnior
gjr_rj

(usa Debian)

Enviado em 04/11/2008 - 02:16h

Olá pessoal, pintou uma dúvida ou melhor, 2.

Tem como eu definir os índices de meu vetor.
ex.
em kylix eu consigo fazer:

p : array [-1..26] of char;

isso é possível em c ?


Outra, em kylix eu consigo saber facilmente se um valor faz parte de um conjunto.
ex.
em kylix eu faço:

vog, vog_mai, vog_min: set of char;
...

vog_mai := [ 'A' , 'E' , 'I' , 'O' , 'U' ];

vog_min := [ 'a' , 'e' , 'i' , 'o' , 'u' ];

vog := vog_mai + vog_min;


if 'a' in vog then ...

eu consigo fazer isso de forma simples assim em c ?




  


2. MELHOR RESPOSTA

Marcelo A. B. Slomp
mslomp

(usa Slackware)

Enviado em 05/11/2008 - 14:00h

pois é, esse recurso de utilizar expressões como índices em linguagens como pascal, basic, php etc, é definido na construção léxica, a fim de 'facilitar'. já o c, por sua essência e também por manter-se o mais cru e próximo possível do real, não implementa essa característica, pois transfere ao programador a tarefa de gerenciar a memória de sua aplicação (tipos e variáveis), o que é apenas facultativo em outras linguagens. é por isso que pascal, etc, já fornecem o tipo string, por exemplo, enquanto que em c é você mesmo quem o 'implementa' através de um array de chars seguidos de um \ 0

olha, quanto marcar a melhor resposta, confesso que também não sei, porém achei esse tópico que fala algo sobre isso:
http://www.vivaolinux.com.br/topico/Helps-e-dicas-para-usuarios-iniciantes/como-encerrar-pergunta-ne...

3. Re: definir variável como no kylix [RESOLVIDO]

Geraldo José Ferreira Chagas Júnior
gjr_rj

(usa Debian)

Enviado em 04/11/2008 - 02:22h


Na realidade o que quero saber é como ficaria esse código em c.

t: array [#$60..#$ee] of string[2] = ('ç', 'u"', 'e''', 'a^', 'a~', #$aa);


4. Re: definir variável como no kylix [RESOLVIDO]

Marcelo A. B. Slomp
mslomp

(usa Slackware)

Enviado em 04/11/2008 - 20:18h

cara, dá para fazer uma manobra que, dependendo o caso, é arriscada:

segue aí um exemplo prático:

#include <stdio.h>

int main(void) {
int n = 1; // n é o valor absoluto do índice negativo. 1 para -1, 2 para -2 etc
char teste[] = {'a','e','i','o','u'}; // um array de testes padrão
char* ptr = malloc(5*sizeof(char)); // aloca memória com tamanho suficiente
memcpy(ptr-(n*sizeof(char)) /* <-- o segredo está aqui */,teste,5*sizeof(char));
/* testando, de -1 a 3 */
printf("ptr[-1]: %c\n",ptr[-1]);
printf("ptr[0]: %c\n",ptr[0]);
printf("ptr[1]: %c\n",ptr[1]);
printf("ptr[2]: %c\n",ptr[2]);
printf("ptr[3]: %c\n",ptr[3]);
return 0;
}

observando o 1° argumento de memcpy, o que fizemos foi copiar teste para uma posição ptr - n vezes o tamanho de cada objeto (char nesse caso):
memcpy(ptr-(n*sizeof(char)),teste,5*sizeof(char));

obviamente isso pode causar um memory leak, portanto todo cuidado é pouco ao decrementar muito o índice, especialmente se mais alguma memória precise ser reservada na heap ao longo do código.

para verificar se um dado char está no array, você pode usar memchr (definido em string.h).
algo tipo:
if(memchr(teste,'e',strlen(teste))!=NULL)


5. Re: definir variável como no kylix [RESOLVIDO]

Geraldo José Ferreira Chagas Júnior
gjr_rj

(usa Debian)

Enviado em 05/11/2008 - 11:30h

Valeu mslomp,

então vou usar outra forma mesmo e fazer um "for" para pesquisa.
Eu queria saber se tinha algum "pulo do gato" como em kylix/Delphi mas como não tem, vou trabalhar com vetores mesmo.
Valeu mesmo, estava até hoje procurando um forma de fazer isso e iria ficar mais um bom tempo pesquisando até me convencer de que não existe.


6. Re: definir variável como no kylix [RESOLVIDO]

Geraldo José Ferreira Chagas Júnior
gjr_rj

(usa Debian)

Enviado em 05/11/2008 - 11:31h

mslomp, queria marcar a sua como melhor resposta. Como faço isso, você sabe ?



7. Re: definir variável como no kylix [RESOLVIDO]

Geraldo José Ferreira Chagas Júnior
gjr_rj

(usa Debian)

Enviado em 06/11/2008 - 10:42h

Pensando bem, depois de postado, achei que seria melhor tratá o array manualmente mesmo, pois preciso de um performance muito grande e deixar alguma coisa por conta do compilador é não é uma boa idéia.

vlw mesmo pela força, pois como disse, mesmo já decidido a não usar essa forma de programação, acabaria perdendo muito tempo até me certificar de que realmente não haveria essa possibilidade.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts