winterl @ 2023-04-22 23:14:40
#include <string>
#include <sstream>
#include <iostream>
int main(){
int n, mode = -1;
std::cin >> n;
std::stringstream ss;
while(n--){
std::string s, tmp;
char c;
std::cin >> c;
if('a' <= c and c <= 'c'){
mode = c - 'a';
std::cin.get();
}
else
s += c;
std::getline(std::cin, tmp);
s+=tmp;
ss << s;
int a, b, ans;
ss >> a >> b;
std::cout << a;
switch(mode){
case 0: std::cout.put('+'); ans = a + b; break;
case 1: std::cout.put('-'); ans = a - b; break;
case 2: std::cout.put('*'); ans = a * b; break;
}
ss.clear();
std::cout << b << '=' << ans << '\n'
<< s.length() + std::to_string(ans).length() << '\n';
}
return 0;
}
如果过样例,最后应该是s.length() + 1 + std::to_string(ans).length()
,但是现在这个样例过不了,但是AC了???
by winterl @ 2023-04-22 23:25:31
补一下注释,可能是有地方我考虑漏了,希望有神犇能帮我找出来
//介于本人的习惯,不想写using namespace std,所以需要加std::来指定变量的命名空间
#include <string> //调用std::to_string用
#include <sstream> //StringStream字符串流
#include <iostream>
int main(){
int n, mode = -1;
std::cin >> n;
//定义字符串流对象
std::stringstream ss;
while(n--){
std::string s, tmp;
char c;
std::cin >> c;
if('a' <= c and c <= 'c'){
mode = c - 'a';
//回收空格
std::cin.get();
}
else
//若不是字母,将这个字符添加到字符串尾
s += c;
//读一行,不保留换行符
std::getline(std::cin, tmp);
//合并
s+=tmp;
//打入字符串流
ss << s;
int a, b, ans;
//从字符串流中获取数据
ss >> a >> b;
//先输入第一个数
std::cout << a;
switch(mode){
//判断,输出运算符的同时计算结果
case 0: std::cout.put('+'); ans = a + b; break;
case 1: std::cout.put('-'); ans = a - b; break;
case 2: std::cout.put('*'); ans = a * b; break;
}
//清空字符串流中的内容
ss.clear();
//打印第二个数和结果
std::cout << b << '=' << ans << '\n'
//计算长度 (输入(从第一个数字字符开始到最后一个数字字符结束)+ 结果的长度)
//【就是这里没明白,这里应该再加上=的长度,也就是再+1,这样是符合样例的,但是0分,把+1去掉后,样例不对,但是是AC代码】
//注:to_string函数可以将其他类型转换为std::string对象
//如:(整型)230 -> (std::string对象)"230"
<< s.length() + std::to_string(ans).length() << '\n';
}
return 0;
}