Как перевести Char в Int в С

Тема в разделе "C/C++/C#", создана пользователем SASS, 10 дек 2009.

  1. SASS

    SASS Гость

    пример:
    char stroka[]='562/-2^52*';
    int cifri[3];

    cifri[0]=(int)stroka[0]; - то есть, мне надо перевести нулевой элемент строки (в данном случае это цифра 5) в нулевой элемент массива чисел, то есть в данном примере хочу чтобы в ячейку cifri[0] занеслась цифра 5. Но на самом деле происходит нечто иное, а именно в ячейку cifri[0] заносится значение 562

    Задача полностью: Вычисление значения выражения. Вводится строка символов (цифры и символы +-/*^) и нужно сначала определить какой вид - префикс или постфикс и найти значение выражения.
    Пример: строка strr[]='54+3/43^8/+' - это будет постфикс. (если бы цифры начинались с права то это был бы префикс, и вычисления шли бы с права на лево)
    Решение: 5+4=9 strr='93/43^8/+'
    9/3=3 strr='343^8/+'
    4^3=64 strr='3 64 8/+'
    64/8=8 strr='38+'
    3+8=11 - это и есть результат.

    Сам код проги:

    Код (Text):
    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
    #define izt_gar 100

    short int veids(char *virk, int gar);
    int postfiksa(char *virk, int gar);  
    int prefiksa(char *virk, int gar);   

    int operacija(int,char,int);

    main(){
    char virkne[izt_gar],flag;

    int garums=0,v,buf[3];
    puts("Vvedite stroku simvolov");
    puts("Razreshennije simvoli: \"+\" \"-\" \"*\" \"/\" \"^\"");
    gets(virkne);
    puts(virkne);
    v=atoi(&virkne[0]);
    printf("\nv= %d\n",v);
    while (virkne[garums]!='\0')
    garums++;
    printf("Garums: %d simboli  ",garums);

    v=veids(virkne,garums);
    if (v==0){
    printf("Postfiks!");
    printf("Rezultat virazenijs: %d",postfiksa(virkne,garums));
    scanf("%d",&v);
    }
    else
    if(v==1){
    printf("Prefiks!");
    printf("Zna4enije virazenija: %d",prefiksa(virkne,garums));
    scanf("%d",&v);
    }    
    }


    short int veids(char *virk, int gar){        
    int v;              // v=0 -> postfiksa; v=1 ->prefiksa;
    if (virk[0]>='0' && virk[0]<='9' && virk[1]>='0' && virk[1]<='9')
    v=0;
    else{
    if (virk[gar-1]>='0' && virk[gar-1]<='9' && virk[gar-2]>='0' && virk[gar-2]<='9')
    v=1;         
    else{
    puts("Stroka vvedena nepravilno! Programma zakan4ivajet svoju rabotu.");
    scanf("%d",&gar);
    exit(1);
    }
    }
    return v;
    }


    int postfiksa(char *virk, int gar){
    int solis=1;
    int n=1;
    int buf[gar/2+1];
    buf[0]=virk[0];
    buf[1]=atoi(&virk[1]);
    printf("\nvirk[0]=%c buf[0]=%d",virk[0],buf[0]);
    printf("\nvirk[1]=%c buf[1]=%d\n",virk[1],buf[1]);
    //printf("\nbuf[0] = %d buf[1]=%d\n",buf[0],buf[1]);

    while(solis<gar){
    if(virk[solis+1]=='+' || virk[solis+1]=='-' || virk[solis+1]=='/' || virk[solis+1]=='*' || virk[solis+1]=='^'){
    buf[n-1]=operacija(buf[n-1],virk[solis+1],buf[n]);
    buf[n]='\0';
    solis++;
    n--;
    }
    else{
    buf[n+1]=atoi(&virk[solis+1]);
    solis++;
    n++;
    //printf("\nbuf[%d]=%c",n+1,buf[n+1]);
    }
    }  
    return buf[0];
    }


    int prefiksa(char *virk, int gar){
    int solis=gar-2;
    int n=1;
    int buf[gar/2+1];
    buf[0]=(int)virk[gar-2];
    buf[1]=(int)virk[gar-1];

    while(solis!=0){
    if(virk[solis-1]=='+' || virk[solis-1]=='-' || virk[solis-1]=='/' || virk[solis-1]=='*' || virk[solis-1]=='^'){
    buf[n-1]=operacija((int)buf[n-1],virk[solis-1],(int)buf[n]);
    buf[n]='\0';
    solis--;
    n--;
    }
    else{
    buf[n+1]=(int)virk[solis-1];
    solis--;
    n++;
    }
    }  
    return buf[0];
    }


    int operacija(int a,char b,int c){
    printf("\na=%d b=%c c=%d\n");
    if (b=='+')
    return(a+c);
    if (b=='-')
    return(a-c);
    if (b=='*')
    return(a*c);
    if (b=='/')
    return(a/c);
    if (b=='^')
    return(pow(a,c));
    exit(1);
    }

    Колдую это все дело на Dev-C++. По заданию всё должно быть только на C. На бумаге не раз проверял - сам алгоритм рабочий. Проблема только в переводе char -> int :please:
     
  2. xKlonx

    xKlonx Lotus team
    Lotus team

    Регистрация:
    10 сен 2009
    Сообщения:
    412
    Симпатии:
    0
  3. sg^_^milytia

    sg^_^milytia Гость

    char mass[]="223 74423";
    int a= (int) mass[0];
    cout << "char= " << (char)a << endl; //как ЧАР
    cout << "int= " << a - 0x30 << endl; //как инт

    вот такой вот вариант
     
Загрузка...

Поделиться этой страницей