吐了 @ 2021-02-27 13:50:49
#include<iostream>
#include<algorithm>
#include<sstream>
using namespace std;
void f(char x,string s){
int t=0,j,m=s.length();
for(j=0;j<m;++j){
if(s[j]!=' ') ++t;
else break;
}
string s1=s.substr(0,t);
int a=atoi(s1.c_str());
string s2=s.substr(j+1,m-j-1);
int b=atoi(s2.c_str());
if(x=='a'){
int c=a+b;
stringstream cs;
cs<<c;
string s3=cs.str();
string result=s1+"+"+s2+"="+s3;
cout<<result<<endl;
cout<<result.length()<<endl;
}
else if(x=='b'){
int c=a-b;
stringstream cs;
cs<<c;
string s3=cs.str();
string result=s1+"-"+s2+"="+s3;
cout<<result<<endl;
cout<<result.length()<<endl;
}
else{
int c=a*b;
stringstream cs;
cs<<c;
string s3=cs.str();
string result=s1+"*"+s2+"="+s3;
cout<<result<<endl;
cout<<result.length()<<endl;
}
}
int main(){
int i,n;
char x;
cin>>n;
for(i=0;i<n;++i){
string s,d;
cin>>d;
cin.get();
getline(cin,s);
if(d[0]=='a'){
x='a';
f(x,s);
}
else if(d[0]=='b'){
x='b';
f(x,s);
}
else if(d[0]=='c'){
x='c';
f(x,s);
}
else{
string v=d+" "+s;
f(x,v);
}
}
return 0;
}
by _caiji_ @ 2021-02-27 13:51:51
建议去洛谷 IDE 测试。
by 吐了 @ 2021-02-27 14:12:54
破案了,洛谷是把回车也算在字符串里面了,所以输出格式每行多一个回车.....奇了怪了这洛谷,devc++上就不算回车
by CGDGAD @ 2021-02-27 15:05:05
@吐了 /yun 为啥把锅甩给洛谷啊
getline 就是读进换行符的
by 吐了 @ 2021-02-27 15:18:33
@NSObject 可是dev中并没有读入换行符啊
by CGDGAD @ 2021-02-27 15:23:27
@吐了 你在本地用文件输入输出试试
by CGDGAD @ 2021-02-27 15:23:55
如果是直接窗口运行的话应该会忽略换行符,这个我不清楚
by 吐了 @ 2021-02-27 15:24:07
@NSObject 如果你指的是前面语句输入整数时的换行符,我用cin.get()丢弃了。 这里导致格式错误的是输入字符串时尾部回车的换行符,当我把m-j-1换成m-j-2时在洛谷IDE中运行结果正常,在dev里反倒少一位。 所以应该是洛谷IDE与dev编译器有一些区别。
by 吐了 @ 2021-02-27 15:25:25
@NSObject emmm,应该是直接窗口运行的话应该会忽略换行符
by CGDGAD @ 2021-02-27 15:27:12
@吐了 我说的是字符串末尾那个
一般来说,如果是 windows 下造的数据,用 gets 和 getline 都不太安全吧 /yiw
by 吐了 @ 2021-02-27 15:29:17
@NSObject 哦哦