在devc++上暂时一切正常,在洛谷的IDE上会在每个等号后面多输出一个换行(原因不明)。 测试数据是1 a 99 999,经测试答案一致。。 下附代码:
#include<bits/stdc++.h>
using namespace std;
int n,i,a,b;
string s="",ans,tmp,k,a1,b1;
stringstream ss;
char now;
char trans(char c){
if(c=='a') return '+';
if(c=='b') return '-';
if(c=='c') return '*';
return '?';} //不想看那个警告
int suan(int a,int b){
if(now=='+') return a+b;
if(now=='-') return a-b;
if(now=='*') return a*b;
return -1;}
int main(){
cin>>n;
getline(cin,k);
while(n--){
getline(cin,s);
if('a'<=s[0] && s[0]<='z') now=trans(s[0]);//定位运算符
while (s[i]>'9' || s[i]<'0') i++;//寻找第一个数字,并将后面截取(就是如果有字母就把字母舍弃掉)
ans=s.substr(i);
i=0;
while(ans[i]!=' ') i++;//定位空格
a1=ans.substr(0,i),b1=ans.substr(i+1);
ss<<a1; ss>>a; ss.str("");ss.clear();
ss<<b1; ss>>b; ss.str("");ss.clear();//提取数字
ans+="=";
ss<<suan(a,b);//计算,并拼回去
ss>>tmp; ss.str("");ss.clear();
ans+=tmp;
ans[i]=now;
cout<<ans<<endl<<ans.length();
if(n!=0) cout<<endl;
i=0; ans=""; }
return 0;
}