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++課程設計複數計算器