Как перевести значение ячейки массива char в int - C (СИ)
Формулировка задачи:
пример:
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 - это и есть результат.
Сам код проги:
Колдую это все дело на Dev-C++. По заданию всё должно быть только на C. На бумаге не раз проверял - сам алгоритм рабочий. Проблема только в переводе char -> int
#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); }
Решение задачи: «Как перевести значение ячейки массива char в int»
textual
Листинг программы
char a='j';
Объяснение кода листинга программы
- Объявляется переменная
a
типа char с начальным значением 'j'. - Переменная
a
имеет тип char, что означает, что она может хранить только однобайтовые значения. Значение 'j' представляется в кодировке ASCII как 109. - Для перевода значения переменной
a
в int необходимо выполнить ряд преобразований. - Во-первых, значение переменной
a
приводится к типу unsigned char. Это необходимо, чтобы избежать отрицательного значения, которое могло бы получиться при прямом приведении к int. - Затем, полученное значение типа unsigned char приводится к типу int.
- Результатом будет значение 109, представляющее символ 'j' в кодировке ASCII.
- Это значение можно использовать в дальнейших вычислениях как значение типа int.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д