将一个数学表达式存入数组 10
将一个数学表达式存入数组。比如将表达式“23+4*10+1/2=”存入数组A[]。要求:A[0]=23,A[1]=+,A[2]=4,A[3]=*,A[4]=10等。23必...
将一个数学表达式存入数组。
比如将表达式“23+4*10+1/2=”存入数组A[]。
要求:A[0]=23,A[1]=+,A[2]=4,A[3]=*,A[4]=10等。
23必须是存入A[0]哈不是单个单个字符存。
在线等哈,谢谢。 展开
比如将表达式“23+4*10+1/2=”存入数组A[]。
要求:A[0]=23,A[1]=+,A[2]=4,A[3]=*,A[4]=10等。
23必须是存入A[0]哈不是单个单个字符存。
在线等哈,谢谢。 展开
3个回答
展开全部
由于字符类型char在C里面上也属整型,所以你的数组可以如下声明:
int A[] = {23, '+', 4, '*', 10, '+', 1, '/', 2};
但是这样做有一个不好的地方,就是当你访问一个数组元素时,你没法区分你拿到的是操作符还是操作数。因为你只能确定你拿到的是一个整数。如果你需要区分,比如打印储存的表达式的时候,你得给你的数组原书贴上标签:
enum alt { opr, opd }; /* 0 表示操作符,1 表示操作数 */
struct atom {
char tag;
int obj;
};
下面是一个例子。打印出储存的表达式 1+2
#include <stdio.h>
enum alt { opr, opd };
typedef struct atm {
char tag;
int obj;
} atm_t;
void show(atm_t);
int
main(void)
{
atm_t exp[] = { {opd, 1}, {opr, '+'} , {opd, 2} };
int i;
for ( i = 0; i < 3; ++i )
show(exp[i]);
putchar('\n');
return 0;
}
void
show(atm_t a)
{
switch (a.tag) {
case 0: printf("%c", a.obj); break;
case 1: printf("%d", a.obj); break;
}
}
int A[] = {23, '+', 4, '*', 10, '+', 1, '/', 2};
但是这样做有一个不好的地方,就是当你访问一个数组元素时,你没法区分你拿到的是操作符还是操作数。因为你只能确定你拿到的是一个整数。如果你需要区分,比如打印储存的表达式的时候,你得给你的数组原书贴上标签:
enum alt { opr, opd }; /* 0 表示操作符,1 表示操作数 */
struct atom {
char tag;
int obj;
};
下面是一个例子。打印出储存的表达式 1+2
#include <stdio.h>
enum alt { opr, opd };
typedef struct atm {
char tag;
int obj;
} atm_t;
void show(atm_t);
int
main(void)
{
atm_t exp[] = { {opd, 1}, {opr, '+'} , {opd, 2} };
int i;
for ( i = 0; i < 3; ++i )
show(exp[i]);
putchar('\n');
return 0;
}
void
show(atm_t a)
{
switch (a.tag) {
case 0: printf("%c", a.obj); break;
case 1: printf("%d", a.obj); break;
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询