#include<iostream>
#include<string>
using namespace std;
typedef float REAL;
#define MAX_BUF_LEN 256
typedef struct COMPLEX
{
REAL r; // 实部
REAL i; // 虚部
};
bool Parse(COMPLEX * cp, const char * strCplx, const int len)
{
memset(cp, 0, sizeof(COMPLEX));
char buf[MAX_BUF_LEN];
int signPos = -1, // +/-号位置
iPos = -1; // 结尾的i的位置
for (int i = len-1; i >-1; i--)
{
if ('i' == strCplx[i])
iPos = i;
else if ('+' == strCplx[i] || '-' == strCplx[i])
{
signPos = i;
break;
}
}
if (0 == iPos) // 纯虚数i
{
cp->r = 0;
cp->i = 1;
}
else if (0 < iPos) // 复数
{
// 实部
if (0 < signPos)
{
memset(buf, 0, sizeof(MAX_BUF_LEN));
memcpy(buf, strCplx, signPos);
cp->r = atof(buf);
}
// 虚部
if (signPos + 1 == iPos) // 虚数部分 = -i / +i
cp->i = '+' == strCplx[signPos] ? 1 : -1;
else
{
memset(buf, 0, sizeof(MAX_BUF_LEN));
memcpy(buf, strCplx + signPos, iPos - signPos);
cp->i = atof(buf);
}
}
else // 实数
{
memset(buf, 0, sizeof(MAX_BUF_LEN));
memcpy(buf, strCplx, len);
cp->r = atof(buf);
}
return true;
}
void Print(COMPLEX & cp)
{
if (0 != cp.i) // 复数
{
if (0 == cp.r) // 纯虚数
{
if (-1 == cp.i)
cout << "-i";
else if (1 == cp.i)
cout << "i";
else
cout << cp.i << "i";
}
else
{
// 实部
cout << cp.r;
// 虚部
if (-1 == cp.i)
cout << "-i";
else if(1 == cp.i)
cout << "+i";
else
{
if (0 < cp.i)
cout << "+";
cout << cp.i << "i";
}
}
}
else// 实数
cout << cp.r;
}
int main()
{
char strCp[MAX_BUF_LEN];
COMPLEX * cp = (COMPLEX*)malloc(sizeof(COMPLEX));
while (1)
{
cin >> strCp;
getchar();
if(ParseComplex(cp, strCp, strlen(strCp)))
{
Print(*cp);
cout << endl;
}
}
free(cp);
}
c++提取复数的实部和虚部
来源:清泛原创 2015-08-17 14:24:55 人气: 我有话说( 0 人参与)
输入一个复数,即可输出它的实部和虚部。
上一篇:浮点数在内存中的表示
下一篇:VC MFC工具栏(CToolBar)控件
注:本文为本站或本站会员原创优质内容,版权属于原作者及清泛网所有,
欢迎转载,转载时须注明版权并添加来源链接,谢谢合作! (编辑:admin)
欢迎转载,转载时须注明版权并添加来源链接,谢谢合作! (编辑:admin)
相关热点
- 1google mock分享(全网最全最好的gmock文...
- 2【解决】asan runtime does not come ...
- 3coinitialize失败,返回值是0x80010106 无...
- 4Reference to ' ' is ambiguous:符号定义重复
- 5hidden symbol ... is referenced by DSO 剖析
- 6浅析Linux段错误:SEGV_MAPERR、SEGV_ACCERR
- 7use of deleted function std::unique_...
- 8VS Addin插件基本开发入门
- 9【解决】munmap_chunk(): invalid pointer
本月排行
- 1C/C++ 如何向上取整? 160次浏览
- 2hidden symbol ... is referenced by DSO 剖析 100次浏览
- 3Linux C++ 单元测试与gcov代... 53次浏览
- 4【解决】double free or corruption (!prev) 46次浏览
- 5CMFCTabCtrl的使用、颜色样式调整 41次浏览
- 6解决:Run-Time Check Failur... 35次浏览
- 7CFileDialog用法及参数解释 30次浏览
- 8error C2220: 警告被视为错误... 27次浏览
- 9与复制构造函数相关的错误.例如... 27次浏览
- 10C++使用OLE/COM高速读写EXCEL的源码 26次浏览
评论排行
- 1C++ 读写xml方法整理(持续更新)3次评论
- 2Reference to ' ' is ambiguous:符号定义重复2次评论
- 3全民OS2次评论
- 4__attribute__2次评论
- 5海量数据相似度计算之simhash和海...2次评论
- 6C++使用OLE/COM高速读写EXCEL的源码2次评论
- 7AfxIsValidAddress 测试内存地址2次评论
- 8C++入门进阶最佳实战2次评论
- 9phpcms附件上传 Flash换成H52次评论
- 10解决xrdp登陆不上的问题:xrdp s...2次评论