2016-11-08 19 views
1

後は、それは私のコンピュータ上で正常に動作しているが、私はSPOJ上で提出していて、それは私にランタイムエラーSIGSEGVを与えている、接尾への変換中置の実装である、私はに新しいです競合のプログラミングと私はこの種のエラーを処理することができません。SPOJ - ランタイムエラーSIGSEGV

#include <iostream> 
#include <stack> 
#include<string.h> 
#include<ctype.h> 
using namespace std; 
int prec(char ch){ 
    switch(ch){ 
     case '^' : return 3; 
        break; 
     case '*': 
     case '/': return 2; 
       break; 
     case '+': 
     case '-': return 1; 
       break; 
     default: return -1; 
    } 
} 
void pti(char a[]){ 
    stack<int> post; 
    int k = -1; 
    for(int i = 0;i<strlen(a);i++){ 
     if(isalnum(a[i])) 
      a[++k] = a[i]; 
     else if(a[i] == '(') 
      post.push(a[i]); 
     else if(a[i] == ')'){ 
      while(!post.empty() && post.top()!= '('){ 
       a[++k] = post.top(); 
       post.pop(); 
      } 
      post.pop(); 
     } 
     else { 
      while(!post.empty() && prec(a[i]) <= prec(post.top())){ 
       a[++k] = post.top(); 
       post.pop(); 
      } 
      post.push(a[i]); 
     } 
    } 
    while(!post.empty()){ 
     a[++k] = post.top(); 
     post.pop(); 
    } 
    a[++k] = '\0'; 
    cout<<a<<endl; 
} 
int main() 
{ 
    int t; 
    cin>>t; 
    for(int i = 0;i<t;i++){ 
     char a[100]; 
     cin>>a; 
     pti(a); 
    } 
} 
+0

ユーザーの入力が100を超えるとどうなりますか?また、char配列の代わりにstd :: stringを使用する – Garf365

答えて

0

入力配列を長くする必要があります。 1000のサイズはACになります。

SIGSEGV信号は、セグメンテーションフォルトが発生したことを意味します。これは基本的に、あなたが属していないメモリにアクセスしたことを意味します。