通常用一个形如”a+bi”的字符串来表示一个复数,a为复数的实部,b为复数的虚部。现在需要对输入的字符串进行分离,自动识别该复数的实部和虚部,并独立输出。
例如,对于输入的复数字符串“3-4.05i”,输出
complex 3-4.05i
the real part is 3
and the imaginary part is -4.05
注意:
1、用于表示复数的字符串符合数学上的书写习惯。
2、每组测试数据仅包括一个用于表示复数的字符串。
3、输入保证合法。
输入示例:
-4.567+3.987i
输出示例:
complex -4.567+3.987i
the real part is -4.567
and the imaginary part is 3.987
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
class Complex{
private:
string str;
float real;
float imag;
void split(){
int len=str.size()-1;
if(str[len]!='i') {
real=stof(str);
imag=0;
}
else if(str=="i"){
real=0;
imag=1;
}
else
{
if(str.find('+',0)!=string::npos){
char *p,*b;
char s[100];
strcpy(s,str.c_str());
p=strtok(s,"+");
real=stof(p);
b=strtok(NULL,"+");
imag=stof(b);
}
else if(str.find('-',0)!=string::npos){
size_t l=str.find_last_of('-');
if(l==0){
real=0;
if(str=="-i")
{
imag=-1;
}
else{
imag=stof(str.substr(0,len));
}
}else{
real=stof(str.substr(0,l));
imag=stof(str.substr(l,len-l));
}
}
else{
real=0;
imag=stof(str.substr(0,len));
}
}
}
public:
Complex(string n){str=n;split();}
void dis(){
cout<<"complex "<<str<<endl;
cout<<"the real part is "<<real<<endl;
cout<<"and the imaginary part is "<<imag<<endl;
}
};
int main()
{
string n;
cin>>n;
Complex c(n);
c.dis();
return 0;
}