caramel_qwq @ 2022-02-14 17:33:39
疑问:为什么在IDE上测,输出第一行是5?“0 0=0”长度为5,但是这是空串的情况?我用特判卡了一下,但是为什么卡不掉?
#include<iostream>
#include<string>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
int n,a,b,c,k;
char t=' ';
string s;
int main(){
cin>>n;
for(int i=1;i<=n+1;i++){
getline(cin,s);
if(s.size()==0) continue;
if(s[0]=='a'||s[0]=='b'||s[0]=='c') t=s[0];
a=b=0;
if(s[0]>='0'&&s[0]<='9') k=0;
else k=2;
for(int j=k;j<s.size();j++){
if(s[j]==' '){
k=j+1;
break;
}
a=a*10+(s[j]-'0');
}
for(int j=k;j<s.size();j++){
if(j=='\n') break;
b=b*10+(s[j]-'0');
}
int len=0;
if(a>=0&&a<=9) len+=1;
if(a>=10&&a<=99) len+=2;
if(a>=100&&a<=999) len+=3;
if(a>=1000&&a<=9999) len+=4;
if(a==10000) len+=5;
if(b>=0&&b<=9) len+=1;
if(b>=10&&b<=99) len+=2;
if(b>=100&&b<=999) len+=3;
if(b>=1000&&b<=9999) len+=4;
if(b==10000) len+=5;
if(t=='a'){
c=a+b;
}else if(t=='b'){
c=a-b;
}else if(t=='c'){
c=a*b;
}
if(c>=0&&c<=9) len+=1;
if(c>=10&&c<=99) len+=2;
if(c>=100&&c<=999) len+=3;
if(c>=1000&&c<=9999) len+=4;
if(c==10000) len+=5;
if(c>=-9&&c<=-1) len+=2;
if(c>=-99&&c<=-10) len+=3;
if(c>=-999&&c<=-100) len+=4;
if(c>=-9999&&c<=-1000) len+=5;
if(c==-10000) len+=6;
len+=2;
if(t=='a') cout<<a<<'+'<<b<<'='<<c<<'\n';
if(t=='b') cout<<a<<'-'<<b<<'='<<c<<'\n';
if(t=='c') cout<<a<<'*'<<b<<'='<<c<<'\n';
cout<<len<<'\n';
}
return 0;
}
if(s.size()==0) continue;
为什么没有奏效?
by jijiaze @ 2022-02-14 17:37:32
@幸运小崽n3 我之前调试的时候发现 getline()
是不能读回车的
by caramel_qwq @ 2022-02-14 17:38:20
@jijiaze 也就是说我把回车读进来了?
by jijiaze @ 2022-02-14 17:38:48
@幸运小崽n3 大概是的
by jijiaze @ 2022-02-14 17:39:50
@幸运小崽n3 如果输入
by jijiaze @ 2022-02-14 17:40:18
@幸运小崽n3 不是,字符串中不包含回车
by caramel_qwq @ 2022-02-14 17:43:58
@jijiaze 感谢帮助qwq