逆波兰表达式(6)

void JudgeFopen_s(errno_t err);        /* 判断文件打开是否成功 */
void ReadFile(FILE *fp, char *ss);    /* 读取文件内容 */
double TransformCtoD(char ch);        /* 将char类型数组的每一个元素转换为double */
void CalculateAndPush(double *num, int *i, int *j, char mm);    /* 计算结果并入栈 */

int main()
{
    FILE *fp;
    errno_t err;

char ss[MAX];    /* 存储逆波兰表达式 */
    int i = 0;
    int j = 0;
    double num[MAX];    /* 栈 */
   
    err = fopen_s(&fp, "E:\\ww.txt", "r");

JudgeFopen_s(err);    /* 判断文件打开是否成功 */
    ReadFile(fp, ss);    /* 读取文件内容,存储到ss中*/

while (ss[i] != '\0')
    {
        if (ss[i] >= '0' && ss[i] <= '9')    /* 如果是数字 */
        {
            /* 因为num是char类型的,需要转换为double类型方便计算 */
            num[j] = TransformCtoD(ss[i]);    /* 将数字存储到栈中 */
            j++;
            i++;
        }
        else if (ss[i] == '+' || ss[i] == '-' || ss[i] == '*' || ss[i] == '/')
        {
            CalculateAndPush(num, &i, &j, ss[i]);    /* 计算结果并入栈 */
        }
        else if (ss[i] == '\n')    /* 如果是换行符,结束循环*/
        {
            break;
        }
    }

printf("%lf", num[0]);

return 0;
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/2a7b13b7c88813cbc9e15362ba8a1b5a.html