大神们!!请指教一下吧,实测都对,就是不过,咋回事啊?!!
查看原帖
大神们!!请指教一下吧,实测都对,就是不过,咋回事啊?!!
1064379
Allen_teacher楼主2023/12/6 15:42
#include <bits/stdc++.h>
#include <vector>
using namespace std;

vector <char> t; // 存储用户输入的每一行字符串(含空格)
vector <vector <char>> arr; // 将用户输入的含有空格的每一行字符串 转存到二维数组中
int main(){
	int n; cin >>n; 
	
//	int n;
//	string ts;
//	getline(cin,ts);
//	n=ts[0]-'0';
	
	string s; // 接收每行含有空格的字符串
	cin.ignore(); // 清除cin的回车缓存
	for(int i=0;i<n;i++){
		getline(cin,s); // getline(cin,string类型)
		t.clear(); // vector t 转存下一个字符串前 记得清空一下
		for(unsigned int j=0;j<s.length();j++) t.push_back(s[j]); // 将字符串s中的每个元素 插入到vector t中
		arr.push_back(t); // 将 vector t 插入到vector二维数组arr中
	}
	
	char f; // 读取运算符
	int a,b,tn,cnt; // a、b保存两个运算数  tn:将字符数的每一位还原为运算数  cnt:统计运算数的位数
	for(unsigned int i=0;i<arr.size();i++){
		tn=0; cnt=0; a=0; b=0; // 遍历二维数组中每一行时,需要重新赋初值0
		if(!(arr[i][0]>='0'&&arr[i][0]<='9')){ // 遍历每一个行的 第一个元素 是否为 非数字(即是否为运算符号字母)
			f=arr[i][0]; // 记录运算符
			for(unsigned int j=2;j<arr[i].size();j++){ // 含有运算符的行  从下标2开始遍历 依次读取字符数字 进行还原  并保存到a与b中
				if(!(arr[i][j]==' ')){ // 没到空格处  说明运算数还没还原完毕
					tn = tn*10+(arr[i][j]-'0'); // 把每一位字符数字还原为运算数
					cnt++; // 每还原一位 位数+1
					if(j==arr[i].size()-1) b=tn; // 如果下标到最后了 则将tn赋给运算数b	
				} else{
					a=tn; // 到空格处  将此时的tn值 赋给a  说明第一个运算数 还原完毕
					tn=0; // 第一个运算数还原完成后 tn重新赋值0
					continue;	
				}
			}	
		} else{
			for(unsigned int j=0;j<arr[i].size();j++){ // 不含有运算符的行  从下标0开始遍历 依次读取字符数字 进行还原  并保存到a与b中
				if(!(arr[i][j]==' ')){ // 没到空格处  说明运算数还没还原完毕
					tn = tn*10+(arr[i][j]-'0'); // 把每一位字符数字还原为运算数
					cnt++; // 每还原一位 位数+1
					if(j==arr[i].size()-1) b=tn; // 如果下标到最后了 则将tn赋给运算数b
				} else{
					a=tn; // 到空格处  将此时的tn值 赋给a  说明第一个运算数 还原完毕
					tn=0; // 第一个运算数还原完成后 tn重新赋值0
					continue;	
				}			
			}
		}
		
		int r; // 存储两个运算数的运算结果
		char ysf; // 存储运算符
		if(f=='a'){
			ysf='+';
			r=a+b;
		}
		if(f=='b'){
			ysf='-';
			r=a-b;
		}
		if(f=='c'){
			ysf='*';
			r=a*b;
		}
		
		int l; // 存储运算结果的位数
		if(r>=0) l=0; // 运算结果大于0的时候,位数从0开始计算
		if(r<0) l=1; // 运算结果小于0的时候,位数从1开始计算(计算-号)
		
		int r2=r; // 将r的值转存到r2中
		while(r2){ // 统计计算结果的位数
			r2=r2/10;
			l++;
		}
		cout <<a <<ysf <<b <<'=' <<r <<endl <<cnt+l+2;
		if(i<arr.size()-1){
			cout <<endl;
		}	
	}	

	return 0;
}
2023/12/6 15:42
加载中...