关于(C++)数据结构复数计算器作业的拓展

   日期:2020-09-22     浏览:167    评论:0    
核心提示:关于(C++)数据结构复数计算器作业的拓展复数计算器几乎是每个c++学习者都会遇到的一个典型的题目,但大多数的题解在处理复数的输入的时候都是将实部和虚部分开输入和存储,对于自己来说挺省事的,但对于使用者来说,比较局限,比较死板。为了实现输入的时候能够以复数的一般形式输入(即(-a,a,a-i,a-bi,a+bi,a+i,-i,i)形式输入,其中a,b为浮点数),对>>进行了以下重载。总体的思路是将输入的内容保存到一个空间较大的字符数组中,然后对其进行识别。(已经定义了一个复数类,a,b分

关于(C++)数据结构复数计算器作业的拓展

  1. 复数计算器几乎是每个c++学习者都会遇到的一个典型的题目,但大多数的题解在处理复数的输入的时候都是将实部和虚部分开输入和存储,对于自己来说挺省事的,但对于使用者来说,比较局限,比较死板。为了实现输入的时候能够以复数的一般形式输入(即(-a,a,a-i,a-bi,a+bi,a+i,-i,i)形式输入,其中a,b为浮点数),对>>进行了以下重载。
  2. 总体的思路是将输入的内容保存到一个空间较大的字符数组中,然后对其进行识别。
  3. (已经定义了一个复数类,a,b分别为复数的实部和虚部)识别分为两个部分,一个是识别只有实部的复数,另一个识别含有虚部的复数(其中包括只有虚部、实部和虚部都有)从左到右依次读取,以+、-、i以及无符号作为识别的标志。
  4. 对于数字部分,整数部分采用自左向右累加,小数部分采用自右向左累加。以小数点“.”为标志。
  5. 由于输入形式多样,需要逐步根据输出的情况逐步修改代码。
  6. 这里并没有对错误的输入进行识别和相应的警示,需要可自行添加。
istream& operator >>(istream& is, Complex1& x)//输入任意形式的复数(-a,a,a-i,a-bi,a+bi,a+i,-i,i)
{ 
	char m[100];
	is >> m;
	int a = strlen(m);
	float n = 0;int  flag = 1, j = 0, k;
	if (m[a - 1] != 'i')//当复数只有实部,复数的形式为(a,-a)
	{    
		if (m[0] == '-')
		{ 
			flag = -1;
			j++;
		}
		else
		{ 
			flag = 1;
		}
		while ((m[j] >= '0' && m[j] <= '9') || m[j] == '.')//小数部分取值计算
		{ 
			int l;float o = 0;
			
			if (m[j] == '.')
			{ 
				for (l = j; m[l] != '\0'; l++)
			{ 
			}
				for (j = l-1; m[j] != '.'; j--)
				{ 
					o = o * 0.1 + m[j] - '0';
				}
				o = o * 0.1;
				n = o + n;
				j = l ;
				break;
			}
			if (o == 0)
			{ 
				n = n * 10 + m[j] - '0';
				j++;
			}
		}
		x.a = n*flag;
		return is;
	}
	else
	{    
		for (j = 0; j < a;j++)
		{ 
			if (n != 0 && (m[j] == '-' || m[j] == '+'))
			{ 
				x.a = flag * n;
				n = 0;
			}
			if (m[j] == '-')
			{ 
				flag = -1;
				j++;
			}
			else if (m[j] == '+')
			{ 
				if (m[j] != 'i')
				{ 
					flag = 1;
					j++;
				}
			}
			else
			{    
				if (m[j] != 'i')
				{ 
					flag = 1;
				}
			}
			if (m[j] == 'i')
			{    
				if (n == 0)
					x.b = flag;
				else
					x.b = flag * n;
				break;
			}
			while ((m[j] >= '0' && m[j] <= '9') || m[j] == '.')
			{ 
				int l; float o = 0;
				for (l = j; m[l] != '-' && m[l] != '+'&&m[l]!='i'; l++)
				{ 
				}
				if (m[j] == '.')
				{ 
					for (j = l-1; m[j] != '.'; j--)
					{ 
						o = o * 0.1 + m[j] - '0';
					}
					o = o * 0.1;
					n = o + n;
					j = l ;
					break;
				}
				n = n * 10 + m[j] - '0';
				j++;
			}
			--j;
		}
	}
}

第一次写博客,有不足的地方请多指教。
参考资料:(只是实现了a±bi的复数形式的识别)
C++课程设计复数计算器

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服