• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

smt

Descobrir o inteiro + longo numa string

1 mensagem neste tópico

Boas, tou as voltas aqui com um problema duma ficha sobre ponteiros, vectores e para usar tipicamente., calloc's e malloc's e mt provavelmente string functions.

Escreva um programa que leia um conjunto de caracteres da consola (até ’\n’

ou ummax.de 10), os armazene num bloco de memória, identifique qual a

maior sequência de algarismos seguidos e escreva o nº inteiro correspondente

(long).

Exemplo:

’1’ ’2’ ’3’ ’4’ ’a’ ’8’ ’9’ ’\n’

Inteiro: 1234

’a’ ’b’ ’3’ ’4’ ’7’ ’8’ ’9’ ’\n’

Inteiro: 34789

’a’ ’b’ ’c’ ’d’ ’e’ ’f’ ’g’ ’\n’

Nao foi introduzido um inteiro.

O meu código está incompleto e provavelmente o que estou a fazer não serve para o que se pede, mas se puderem ajudar-me a completar, agradecia mt, n tou a csguir.Aki vai:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

void maior_cadeia(char *p);

int main()
{
char *ptr;

ptr=(char*) calloc(10,sizeof(char));

if(ptr==NULL)
{
	printf("Memoria nao alocada\n");
}		
printf("Introduza String: ");

scanf("%10s", ptr);

maior_cadeia(ptr);

system("PAUSE");
free(ptr);

}


void maior_cadeia(char *p)
{   int i;
    char nums[]="0123456789";
    char* aux;
aux=(char*) calloc(10,sizeof(char));
//Caso só se introduzam letras;funciona pró 3º exemplo
if (numChars(p)==strlen(p))
           printf("Nao foi introduzido um inteiro");
    
    for (i=0;i<strlen(p);i++){
        if(isdigit(p[i]) && isdigit(p[i+1])){ 
            aux[i]=p[i];
            aux[i+1]=p[i+1];                      
            printf("i: %c\n",aux[i]);
            printf("i+1: %c\n",aux[i+1]); 
            printf("Aux: %s\n",aux);    
        }   
    }
    printf("Aux no fim: %s\n",aux);
free(aux);
}

int numChars(char *p)
{   int cont=0;	
while(*p!='\0')
{	
	if(isalpha(*p)){
          cont++;              
        }
        *p++;
}
return cont;
}

Queria que aux fosse uma string com a concatenação dos caracteres(digitos neste caso) encontrados até achar uma letra; por exemplo eu introduzia 1234ab56 e ele dps guardava aux como 1234 da 1ª x, e dps como 56.Posteriormente guardaria esse valor d aux,convertendo pa int, num vector de inteiros.Depois via kual o maior e imprimia.Assim ficaria com 2 inteiros guardados, 1234 e 56 e imprimiria "1234 é o maior inteiro".

Se calhar estou a complicar, mas já tentei de tta maneira e às ttas é um erro estupido...

0

Partilhar esta mensagem


Link 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