關於複數輸入輸出的一點看法

我只能說複數這個東西是真的噁心,沒話講
由於你們都知道的,輸入格式就不少樣,輸出也不少樣。
只得哇的一聲哭出來。
由於我是c++運算符重載要用,因此手打了「一萬個if」
你們只看clss Complex裏的display和inial就能夠
(display輸出,inial輸入)c++

void disply(){
    if (imag==0){
            cout<<real;
        }//虛部爲0,直接輸出實部
        if (imag==1||imag==-1){
            if (imag==1){
                if (real==0){
                cout<<"i";}
                else 
                cout<<real<<"+"<<"i";
        }//由於會出現n+i或者n—i的狀況,因此判斷一手
            if (imag==-1){
                if (real==0){
                cout<<"-"<<"i";}//-i的狀況單獨判斷
                else
                cout<<real<<"-"<<"i";
        }
        }
        if (imag<-1||imag>1){
            if (imag<0){
                if (real==0){
                    cout<<imag<<"i";}
                else 
                cout<<real<<imag<<"i";  
            }
            if (imag>0){
                if (real==0){
                    cout<<imag<<"i";}
                else 
                cout<<real<<"+"<<imag<<"i";
            }
        }//這就是比較標準的輸出,例如a+bi這種
    }

固然輸出不是最噁心的,輸入纔是。
我輸出大概打了半個小說,而輸出用了我一節晚自習。
固然也有我我的因素,可是狀況的多樣性和操做的複雜性,沒得說數組

Complex inial(){
        string s;
    cin>>s;
    char c[100],real[100],imag[100];
    strcpy(c, s.c_str());//獲得便於操做的字符數組
    int len1=s.length();//獲得字符串的有效長度
    int sum=0;
    int real1=0,imag1=0;
    for (int i=0;i<len1;i++){
        if (c[i]=='+'||c[i]=='-'||c[i]=='i'){
            sum++;
        }
    }//判斷+ - 和i的個數
    if (sum==0){
        real1=atoi(c);
    }   //若是符號是0,那麼只多是實部
    if (sum==1){
        if (c[len1-1]=='i')//最後一位是i的狀況
        {
            if (len1==1){
                imag1=1;
            }//長度是1只能是i,只有i沒有1i這種操做
            else
            imag1=atoi(c);//長度不爲1,只能是虛部,
        }
        else{
            real1=atoi(c);//最後一位不是i,那麼只能是負數,直接轉化就ok
        }
    }
    if (sum==2){
        if (c[len1-2]=='+'){
            real1=atoi(c);
            imag1=1;//n+i
        }
        if (c[len1-2]=='-'){
            real1=atoi(c);
            imag1=-1;//n-i
        }   
        if (c[0]=='-'){
            if (c[1]=='i')
            imag1=-1;//-i
            else
            imag1=atoi(c);
        }
        if (c[len1-2]!='+'&&c[len1-2]!='-'){//找符號,騷氣的操做來了,a+-bi的形式
            int pos=1;//獲得子串長度
            for (pos;pos<len1;pos++)
            {
                if (c[pos]=='+'||c[pos]=='-')
                break;
            }
            if (c[pos]=='+'){
                real1=atoi(c);
                string c_other=s.substr(0,pos);
                real1=atoi(c_other.c_str());
                string c_others=s.substr(pos+1,s.length()-pos-2);
                imag1=atoi(c_others.c_str());
            }
            if (c[pos]=='-'){
                real1=atoi(c);
                string c_other=s.substr(0,pos);
                real1=atoi(c_other.c_str());
                string c_others=s.substr(pos+1,s.length()-pos-2);
                imag1=-atoi(c_others.c_str());
            }
            }
        }//我以爲百度都ok的
    if (sum==3){
        if (c[len1-2]=='+'){
            real1=atoi(c);
            imag1=1;
        }
        if (c[len1-2]=='-'){
            real1=atoi(c);
            imag1=-1;
        }   
        if (c[len1-2]!='+'&&c[len1-2]!='-'){
            int pos=1;
            for (pos;pos<len1;pos++)
            {
                if (c[pos]=='+'||c[pos]=='-')
                break;
            }
            if (c[pos]=='+'){
                real1=atoi(c);
                string c_other=s.substr(0,pos);
                real1=atoi(c_other.c_str());
                string c_others=s.substr(pos+1,s.length()-pos-2);
                imag1=atoi(c_others.c_str());
            }
            if (c[pos]=='-'){
                real1=atoi(c);
                string c_other=s.substr(0,pos);
                real1=atoi(c_other.c_str());
                string c_others=s.substr(pos+1,s.length()-pos-2);
                imag1=-atoi(c_others.c_str());//一個道理
            }
        }
    }
        return Complex(real1,imag1);//用了構造函數初始化,你們忽略就ok
    }

整體來講就這樣,具體我以爲本身寫出虛部是否爲0,+-i,而後+-ni
實部爲0,+-n,而後排列組合一下
祝你們好運hhh函數

相關文章
相關標籤/搜索