Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2009, 14:01   #1
SASS
Новичок
Джуниор
 
Регистрация: 09.12.2008
Сообщений: 2
По умолчанию Как перевести значение ячейки массива char в int в Си

пример:
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 - это и есть результат.

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

Код:
#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

Последний раз редактировалось Stilet; 10.12.2009 в 14:42.
SASS вне форума Ответить с цитированием
Старый 10.12.2009, 14:44   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Но на самом деле происходит нечто иное, а именно в ячейку cifri[0] заносится значение 562
Проверил на Борланд Си - заносится 53 (это видимо код символа "5")
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перевести char в int? TwiX Общие вопросы C/C++ 4 17.09.2009 11:52
Как перевести Sting в Char? vitamin.rulez Помощь студентам 7 13.12.2008 15:42
из char в int llin Общие вопросы C/C++ 13 11.07.2008 06:51
Есть таблица - В ней три поля int, char, char нужно чтобы данные заносились в таблицу Mysql Muahahaha PHP 8 27.03.2008 11:17
Как перевести int в char в C? Dantes_1986 Общие вопросы C/C++ 4 25.12.2007 11:31