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

  • Автор темы SASS
  • Дата начала
S

SASS

Гость
#1
пример:
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 :please:
 
S

sg^_^milytia

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

вот такой вот вариант