前提・実現したいこと
スタックのデータ構造を用いて, 逆ポーランド記法で入力した文字列の計算を行うアルゴリズムを作成しました.
入力した文字列をchar型配列に格納し, for文で一文字ずつ読み込み, プッシュ・ポップ・演算を行います.
望まれる入出力は以下のようになります.
例1
入力:12+
出力:3
例2
入力:34+12-*
出力:-7
発生している問題
どのような入力に対しても0が返されます.
該当のソースコード
c
1#include <stdio.h> 2#include <string.h> 3#include <stdlib.h> 4#define MAX 10000 5int top; //スタックに入っているデータの数 6int st[MAX]; //スタック 7 8//push 9void push(int a) { 10top++; 11st[top]=a; 12} 13 14//pop 15int pop(){ 16top--; 17return st[top+1]; 18} 19 20int main(void){ 21char c[128]; //入力文字列 22char s; //数字のpushで使う 23int a,b; //演算のオペランド 24int size; //入力文字列の長さ 25scanf("%s",c); 26size = strlen(c); 27 28for(int i; i<size; i++){ 29if(c[i]=='+'){ //加算 30a=pop(); 31b=pop(); 32push(a+b); 33}else if(c[i]=='-'){ //減算 34b=pop(); 35a=pop(); 36push(a-b); 37}else if(c[i] == '*'){ //乗算 38a=pop(); 39b=pop(); 40push(a*b); 41}else{ 42s=c[i]; 43push(atoi(&s)); 44} 45} 46printf("%d",pop()); 47}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。