7-3 复数的实部和虚部 (16分)

通常用一个形如”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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值