Ir para o conteúdo
Tim§id€

Verificar se a string/char tem inteiros

Mensagens Recomendadas

Tim§id€

Boas,

existe alguma funçao q verifique se, por exemplo tenho uma string/char com caracteres e inteiros, terei que percorrer este char posição a posição e verificar se existe inteiro em cada posição do char, se houver entao numero1=string .Mas não estou a conseguir.

Por exemplo:

char s[]; s="ab2n3gas4"; tem 3 inteiros, tirar os inteiros de lá e por cada inteiro numa variavel, já pesquisei na internet e encontrei o atoi() mas não é bem aquilo que pretendo.

A for

Obrigado


...º(>_<)º...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PsySc0rpi0n

Assim muito por alto, precisa-se de algo que dê para "ir armazenando" os inteiros, sempre que forem detectados, tipo uma array.

size_t i = 0;
size_t len = strlen (string);
while (i < len){
   if (isdigit(string[i]))
       intArray [i] = string [i];
   i++;
}

Atenção, não faço ideia se isto funciona... Estou a tentar responder ao desafio.

Editado por PsySc0rpi0n

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tim§id€

já pensaste no que essa frase implica ?

sim fazer um ciclo para correr a frase depois verificar se em posicao =inteiro então variável =frase, penso eu :D mas vou exprimentar, e ja posto o resultado! Alias é algo parecido que o @PsySc0rpi0n fez, que eu tinha em mente mas em vez de while ia um for .

  • Voto 1

...º(>_<)º...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tim§id€

int main()
{
char frase[10];
int val[10];
scanf("%s",&frase);
int i=0;
for(i=0; i<strlen(frase); i++)
{
 if(isdigit(frase[i]))
 {
	 val[i]=frase[i];
	 printf("valor %c ",val[i]);
 }
}
// lerMapa("mapa.txt");
return 0;
}

ja consegui, :D obrigado.

Editado por Tim§id€

...º(>_<)º...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PsySc0rpi0n

Pois, fazendo a leitura de um ficheiro, que não se sabe o que lá poderá ter dentro, a melhor forma, se calhar, era alocar memória dinamicamente, consoante o tamanho do ficheiro ou assim! Ou então declarar uma variável com "espaço suficiente" para guardar uma quantidade grande de valores. Tipo 1024 ou 2048 ou algo assim! Tudo depende do contexto! Ou ainda melhor, com lists ligadas!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tim§id€

Agora imagina que a string tem mais do que 10 digitos la pelo meio

@PsySc0rpi0n

Certo, vou explicar o meu problema. Eu preciso de saber se é int ou nao pq vou ter q ler um ficheiro.txt onde a primeira linha tem a dimensão do array que é 10 10 e nas linhas restantes vou ter as posições para x e y

10 10 ----primeira linha

(1,1)--- as restantes linhas

(1,5)--- as restantes linhas

etc.

onde o primeiro valor é x e o segundo valor é y

Na parte da leitura pensei fazer algo do genero, nao sei se é possível mas, gravar a informação toda do ficheiro em uma string, de seguida ler caracter a caracter e guardar então as entradas em mapaX[] e mapaY[].. :D

Editado por Tim§id€

...º(>_<)º...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PsySc0rpi0n

Eu acho que não percebi qual é o objectivo do problema!

Inicialmente a ideia era "isolar" os inteiros presentes numa string. Depois no code que postaste, vê-se algo que lê um ficheiro... Eu fiquei a pensar que esse ficheiro teria uma misturas de caactéres e inteiros e que querias "isolar" os inteiros e depois mostrá-los na consola.

Neste momento, parece que o problema já tem um rumo diferente.

Tens que ler um ficheiro qualquer em que a 1ª linha contem informação da dimensão de uma matriz e as linhas seguintes contêm informação sobre posições nessa matriz.

E o que queres é ler essas informações e guardá-las em variáveis tipo:

1ª linha

var1 [10][10]

2ª linha

var2 [0] = 1

var2 [1] = 1

3ª linha

var3 [0] = 1

var3 [1] = 5

É isto que é o pretendido?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

Tens que ler um ficheiro qualquer em que a 1ª linha contem informação da dimensão de uma matriz e as linhas seguintes contêm informação sobre posições nessa matriz.

se for isso só exist euma solução : memória dinâmica pois nunca sabes qual o tamanho da matrix


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tim§id€

Estou aqui a queimar os neuronios, mas não consigo guardar a informação toda em uma variável char. Em C nao se pode fazer como em Java, basta mandar tudo para uma variável String?


...º(>_<)º...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tim§id€

Isto pq acho ser a maneira mais facil, visto que ao guardar a informação toda em uma variável, poderei depois fazer o if para ver se ha inteiros por la. Porque como disse o ficheiro.txt tem as seguintes linhas

10 10

(1,1)

(1,2)

(1,3)

(1,4)

(5,4)

no total sao 10 linhas.


...º(>_<)º...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PsySc0rpi0n

Eu não sei se consegui perceber...

Mas o ficheiro tem esses números misturados com caractéres ou onde estão os caracdtéres misturados com números?

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tim§id€

Eu não sei se consegui perceber...

Mas o ficheiro tem esses números misturados com caractéres ou onde estão os caracdtéres misturados com números?

Sim ao abrir o ficheiro normalmente no notepad tenho os valores/caracteres com o formato que mencionei anteriormente.

e são 10 linhas todas com o mesmo formato, logo, pode ser tudo lido directmanete com o *scanf

certo, obrigado, irei tentar ver se consigo alguma coisa :cheesygrin:


...º(>_<)º...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PsySc0rpi0n

Então o conteúdo do file será algo deste género:

lksflsfnht1010çsmflkflkse

sçelmfçel1sºe,fºe1sef

sef1sefes5sefsef

???

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tim§id€

Então o conteúdo do file será algo deste género:

lksflsfnht1010çsmflkflkse

sçelmfçel1sºe,fºe1sef

sef1sefes5sefsef

???

não será mesmo

10 10

(1,1)

(1,2)

(1,3)

(1,4)

(5,4)

etc.


...º(>_<)º...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tim§id€

Boas, eu tenho o seguinte codigo, mas nao me esta graver em frase[] ;

FILE* ficheiro=fopen(nomeFicheiro,"r");
   int frase[100];
   int i=0;
   while(!feof(ficheiro))
   {
    fscanf(ficheiro,"%d",&frase[i]);
    i++;
   }
   fclose(ficheiro);


...º(>_<)º...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PsySc0rpi0n

não será mesmo

10 10

(1,1)

(1,2)

(1,3)

(1,4)

(5,4)

etc.

Então mas os caracteres que tu dizes que estão misturados com os números e que tu queres extrair são os parêntesis curvos e as vírgulas, é isso???

Editado por PsySc0rpi0n

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tim§id€

Então mas os caracteres que tu dizes que estão misturados com os números e que tu queres extrair são os parêntesis curvos e as vírgulas, é isso???

os caracteres sao só parêntesis curvos e as virgulas e eu pretendo extrair apenas os numeros.


...º(>_<)º...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
PsySc0rpi0n

os caracteres sao só parêntesis curvos e as virgulas e eu pretendo extrair apenas os numeros.

Pois, nesse caso, tal como o happyhippihippo disse, o fscanf será mesmo a melhor opção, já que é possível "ignorar" os caractéres que não interessam... Neste caso, os parêntesis e as vírgulas e ficares apenas com os algarismos.

Eu ainda tentei uma abordagem sem qualquer ajuda de ninguém e consegui extrair os algarismos do ficheiro individualmente. Mas mesmo individualmente, ou seja, o 10 ficou guardado como 1 e 0 e não como 10. Depois era necessário "concatenar" estes dois algarismos e então alocar a memória para a matriz. Esta última parte já não consegui fazer! Mas pelo menos ainda tentei.

Eu já vi a solução para o problema mas não tenho o code comigo mas posso tentar partir do que o happyhippihippo me mostrou (ou seja, do que me lembro do que ele me mostrou) e tentar trabalhar a partir daí!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Tim§id€

Boas, eu tenho este codigo, que le a primeira linha onde estao os valores 10 10 e depois crio o mapa[][] com os valores 10 10, onde de seguida vou preencher o array todo com 0; A minha duvida é, eu nao consigo ler as restantes linhas do ficheiro. Acho que ja tentei de tudo pesquisei de tudo e nada resultou.

FILE* ficheiro=fopen(nomeFicheiro,"r");
int x,y;//total array
fscanf(ficheiro,"%d %d",&x,&y);//le ficheiro 1 linha
fclose(ficheiro);
int mapa[x][y];//dimensao array bidimensional
int i,j;
for(i=0; i<x; i++)
 for(j=0; j<y; j++)
	 mapa[i][j]=0;
printf("valor mapa na posicao 1-1 %d ",mapa[1][1]);

Editado por Tim§id€

...º(>_<)º...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.