Ir ao conteúdo
  • Cadastre-se

C Converter de número extenso para inteiro


luis.paulo

Posts recomendados

Converter uma string recebida do usuario contendo um número por extenso entre zero e novecentos e noventa e nove, para inteiro.

 

codigo até agora:

 

#include <stdio.h>
#include <string.h>
int main(){
    int num;
    char num_ext[999];

    printf("Digite um numero: ");
    scanf("%[^\n]s", num_ext);
    num = atoi(num_ext);
    printf("%d", num);

    return 0;

}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@luis.paulo    para os dez primeiros poderia ser assim :

#include <stdio.h>
#include <string.h>
char unid[10][5]={"zero","um","dois","tres","quatro","cinco","seis","sete","oito","nove"};
int main(){
    int num,i;
    char num_ext[5];
    printf("Digite um numero: ");
    scanf("%[^\n]s", num_ext);/* num por extenso é em forma de palavras */
    //num = atoi(num_ext);/* converter string que contenha apenas digitos de zero até nove */
    for(i=0;i<10;i++){
        if(strcmp(num_ext,unid[i])==0)
            printf(" => %s eh igual a -> %d\n",num_ext,i);
    }
    return 0;
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@devair1010 Tentei editar para exibir até 999 mas não imprime.

#include <stdio.h>
#include <string.h>
char unid[10][5]={"zero","um","dois","tres","quatro","cinco","seis","sete","oito","nove"};
char dez[10][20]={"Zero","Dez","Vinte","Trinta","Quarenta","Cinquenta","Sessenta","Setenta","Oitenta","Noventa"};
char cent[10][20]={"Zero","Cento","Duzentos","Trezentos","Quatrocentos","Quinhentos","Seiscentos","Setecentos","Oitocentos","Novecentos"};
char excecao[10][20]={"Dez","Onze","Doze","Treze","Catorze","Quinze","Dezesseis","Dezessete","Dezoito","Dezenove"};

int main(){
    int num,i;
    char num_ext[5];

    printf("Digite um numero: ");
    scanf("%[^\n]s", num_ext);

    for(i=0;i<999;i++){
        if(strcmp(num_ext,unid[i])==0){
            printf(" => %s eh igual a -> %d\n",num_ext,i);
        }
        else if(strcmp(num_ext,dez[i])==0){
            printf(" => %s eh igual a -> %d\n",num_ext,i);
        }
        else if(strcmp(num_ext,cent[i])==0){
            printf(" => %s eh igual a -> %d\n",num_ext,i);
        }
        else if(strcmp(num_ext,excecao[i])==0){
            printf(" => %s eh igual a -> %d\n",num_ext,i);
        }

    }
    return 0;
}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

5 horas atrás, luis.paulo disse:

@devair1010 Tentei editar para exibir até 999 mas não imprime.


#include <stdio.h>
#include <string.h>
char unid[10][5]={"zero","um","dois","tres","quatro","cinco","seis","sete","oito","nove"};
char dez[10][20]={"Zero","Dez","Vinte","Trinta","Quarenta","Cinquenta","Sessenta","Setenta","Oitenta","Noventa"};
char cent[10][20]={"Zero","Cento","Duzentos","Trezentos","Quatrocentos","Quinhentos","Seiscentos","Setecentos","Oitocentos","Novecentos"};
char excecao[10][20]={"Dez","Onze","Doze","Treze","Catorze","Quinze","Dezesseis","Dezessete","Dezoito","Dezenove"};

int main(){
    int num,i;
    char num_ext[5];

    printf("Digite um numero: ");
    scanf("%[^\n]s", num_ext);

    for(i=0;i<999;i++){
        if(strcmp(num_ext,unid[i])==0){
            printf(" => %s eh igual a -> %d\n",num_ext,i);
        }
        else if(strcmp(num_ext,dez[i])==0){
            printf(" => %s eh igual a -> %d\n",num_ext,i);
        }
        else if(strcmp(num_ext,cent[i])==0){
            printf(" => %s eh igual a -> %d\n",num_ext,i);
        }
        else if(strcmp(num_ext,excecao[i])==0){
            printf(" => %s eh igual a -> %d\n",num_ext,i);
        }

    }
    return 0;
}

 

 

@devair1010 Pode me ajudar?

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

@luis.paulo     precisa colocar os nomes referentes aos números unidade dezena centena  , em um vetor para pesquisar nele , então seu código com algumas modificações poderia ser assim  :

#include <stdio.h>
#include <ctype.h>
#include <conio.h>
#include <math.h>
#include <string.h>
#include <windows.h>
#define H GetStdHandle(STD_OUTPUT_HANDLE)
#define cls system("cls");
void textcolor_2(int l,int f){SetConsoleTextAttribute(H,l+(f<<4));}
void gotoxy_2(int x,int y){COORD c={x,y};SetConsoleCursorPosition(H,c);}
char palavras[42][15]={
     "zero"       , "um"           , "dois"       ,"tres"       , "quatro"    ,
     "cinco"      , "seis"         , "sete"       ,"oito"       , "nove"      ,
     "dez"        , "onze"         , "doze"       ,"treze"      , "quatorze"  ,
     "quinze"     , "dezesseis"    , "dezessete"  ,"dezoito"    , "dezenove"  ,
     ":"          , ","            , "vinte"      ,"trinta"     , "quarenta"  ,
     "cinquenta"  , "sessenta"     , "setenta"    ,"oitenta"    , "noventa"   ,
     ":"          , "cem"          , "cento"      ,">"          , "duzentos"  ,
     "trezentos"  , "quatrocentos" , "quinhentos" ,"seiscentos" , "setecentos",
     "oitocentos" , "novecentos" } ,
     dep[3][15]   ,
     palavras_validas[3][15]       ;
int letras[25][5]={{15,16,14, 1,30}, /* S */
                   {14,17,31,17,17}, /* A */
                   {14, 4, 4, 4,14}, /* I */
                   {17,25,21,19,17}, /* N */
                   {30,17,17,17,30}, /* D */
                   {14,17,17,17,14}, /* O */
                   { 0, 0, 0, 0, 0}, /*   */
                   { 1, 2, 4, 0,16}, /* ! */
                   {17,25,21,19,17}, /* N */
                   {17,17,17,17,14}, /* U */
                   {17,27,21,17,17}, /* M */
                   {31,16,30,16,31}, /* E */
                   {30,17,30,18,17}, /* R */
                   {14,17,17,17,14}, /* O */
                   {15,16,14, 1,30}, /* S */
                   {30,17,30,16,16}, /* P */
                   {14,17,17,17,14}, /* O */
                   {30,17,30,18,17}, /* R */
                   {31,16,30,16,31}, /* E */
                   {17,10, 4,10,17}, /* X */
                   {31, 4, 4, 4, 4}, /* T */
                   {31,16,30,16,31}, /* E */
                   {17,25,21,19,17}, /* N */
                   {15,16,14, 1,30}, /* S */
                   {14,17,17,17,14}, /* O */
                   };
void desenhar(int y,int n){
    int w,px,py,x;                            /* variáveis simples                       */
    CONSOLE_SCREEN_BUFFER_INFO SBInfo;        /* informações sobre a buffer da tela      */
    GetConsoleScreenBufferInfo(H, &SBInfo);   /* pega a posição do cursor do console     */
    px = SBInfo.dwCursorPosition.X;           /* pX posição da col do cursor no console  */
    py = SBInfo.dwCursorPosition.Y;           /* pY posição da linh do cursor no console */
    int y1=py+2,x1=20,y2=y1,x2=x1,j,i,a,b;    /*y1=linh ini y2 p/ recuperar a linh inici */
    if(n==3)x2+=12;
    for(i=0;i<n;i++){                /* sao 8 letras                                     */
        for(j=0;j<5;j++){            /* o caractere é de 5 linhas                        */
            x1 = x2;
            a=letras[i+y][j];        /* pega o numero da 1 linha do caractere            */
            for(b=0;b<5;b++){        /* aqui eh um numero de apenas 8 bits               */
                gotoxy_2(x1,y1);
                if(a % 2 != 0){      /* se bit 0 igual 1                                 */
                    printf("%c",219);/* coloc espaço invertido senão coloc espaço normal */
                }
                else{
                    printf(" ");     /* senão coloca espaço normal                       */
                }
                a=a/2;               /* dividir numero por 2 desloca os bits para direita*/
                x1--;
                if(n==8)Sleep(10);
            }
            y1++;                    /* muda para proxima linha                          */
            x1=x2;                   /* volta para a coluna inicial                      */
        }                            /* proxima linha                                    */
        x2=x2+6;                     /* avança 6 colunas posicionando para o prox caract */
        y1=y2;                       /* volta para linha inicial                         */
    }                                /* imprimiu o primeiro caractere                    */
}
void borda(char *barra){
    int j;
    textcolor_2(11,0);
    printf("%s",barra);
    for(j=0;j<23;j++){
        gotoxy_2(0,j);
        printf("%c",186);
        gotoxy_2(79,j);
        printf("%c",186);
    }
    printf("%s",barra);
    gotoxy_2(0 , 0);printf("%c",201);
    gotoxy_2(79, 0);printf("%c",187);
    gotoxy_2( 0,23);printf("%c",200);
    gotoxy_2(79,23);printf("%c",188);
}
int main(){
    int j,q,z,i,tm,k,m,w,val,c,flag;
    char num_ext[35],nome[20]={},op,barra[81]={};
    for(j=0;j<80;j++)barra[j]=(char)205;barra[80]='\0';
    do{
        textcolor_2(14,0);
        cls;
        borda(barra);
        gotoxy_2(0,0);
        textcolor_2(14,0);
        desenhar( 8,7);
        desenhar(15,3);
        desenhar(18,7);
        textcolor_2(14,0);
        val=0;
        i=-1;
        c=0;
        w=0;
        z=0;
        gotoxy_2(5,20);
        printf("Digite um numero em forma de texto : ");
        fflush(stdin);
        scanf("%[^\n]s",num_ext);/* num por extenso é em forma de palavras */
        do{
            c=-1;
            do{
                i++;
                c++;
                if(num_ext[i]!=' '&& num_ext[i] != '\0'){
                    nome[c] = num_ext[i];                        /* pega a palavra do nome */
                }
            }while(num_ext[i] != ' ' && num_ext[i+1] != '\0' );  /* até completar a palavra ou terminar a frase */
            if(strlen(nome) > 0 )
                if(num_ext[i+1]=='\0')c++;
            nome[c]='\0';
            if(num_ext[i]==' '){
                if(num_ext[i+1]=='e')i+=2;
            }
            flag=0;
            k=0;
            m=1;
            for(j=0;j<42;j++){
                if(strcmp(nome,palavras[j])==0){                 /* verifica qual número */
                    if(strcmp(palavras[j+1],">")==0){k--;j++;}   /* cem e cento é a mesma coisa */
                    val+=(m*k);                                  /* calcula o valor do número */
                    strcpy(palavras_validas[z],nome);            /* arquiva as palavras que não são números */
                    z++;                                         /* próxima posição no vetor */
                    flag=1;                                      /* informa que encontrou a palavra */
                    break;                                       /* e sai desse loop For */
                }
                else{                                            /* se não é um número */
                    if(strcmp(palavras[j],":")==0){              /* dois pontos significa */
                        m*=10;                                   /* multiplicar por dez o multiplicador */
                        k=0;                                     /* reseta o multiplicando */
                        if( strcmp(palavras[j+1],",")==0 ){      /* vrgula significa */
                            k=1;                                 /* multiplicando igual a hum */
                            j++;                                 /* avança para o próximo caractere */
                        }
                    }
                }
                if(strcmp(palavras[j],">")==0)                   /* menorque significa */
                    k-=2;                                        /*decrementar em dois o multiplicando */
                k++;                                             /* incrementa o multiplicando */
            }
            if( ! flag ){                                        /* se flag igual a zero , palavra não é um número */
                strcpy(dep[w],nome);                             /*  guarda a palavra */
                w++;                                             /* incremnta a posição no vetor de palavras inválidas */
            }
        }while( num_ext[ i+1 ] != '\0' );                        /* repete até terminar a frase */
        gotoxy_2(5,22);                                          /* posiciona o cursor na col 5 e linha 22 da tela */
        textcolor_2(11,0);                                       /* colorir as letras */
        if( z ){                                                 /* se z diferente de zero */
            for(q=0;q<z;q++){
                printf("%s",palavras_validas[q]);                /* imprime todas as palavras */
                if(z>1 && q<z-1)printf(" e ");
            }
        }
        else{
            printf("%s ",num_ext);                               /* imprime o que foi digitado pelo usuário */
        }
        printf(" %c igual => %d\n",130,val);                     /* mostra o valor do número digitado */
        if( w ){                                                 /* se w diferente de zero */
            textcolor_2(10,12);                                  /* colorir as letras */
            for(q=0;q<w;q++)
                printf(" A Palavra %12s N%co Condiz Com Os Fatos . . . ! \n",/* imprime as palavras inválidas */
                       dep[q],198);
        }
        textcolor_2(12,15);                                      /* colorir as letras */
        gotoxy_2(25,24);
        printf("   outro numero S/N     \b\b\b");
        flag=1;
        op=' ';
        while( ! kbhit()&&flag){
            op=(char)getch();
            if(op!=' ')flag=0;
        }
        printf("\n");
    }while( toupper(op) != 'N' );
    textcolor_2(11,0);
    printf("\n\n");
    desenhar(0,8);
    printf("\a\n\n");
    textcolor_2(10,12);
    return 0;
}

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...