c++ funktion printet ohne ausgabe?



  • c++ funktion printet ohne ausgabe?
    habe hier folgenden Code und mein Prof fragte mir in der mündlichen warum die funktion eine ausgabe hat und eine map printet ohne std:: cout oder print und ich war verwirrt warum das funktioniert... kann mir einer helfen? es geht um diese getalignment funktion...die was printen kann ohne einen cout oder print aufruf... wie geht sowas?

    /// output alignment into three strings.
    /// Gaps are denoted as '-' in sequences.
    /// The gap-string uses '|' (match) and ' ' (mismatch/gap).
    /// Note: all strings are equal in size
    /// e.g.
    /// a1: "IMISSMISSIS-SIPPI-"
    /// gaps: " | |||||| |||| "
    /// a2: "-M--YMISSISAHIPPIE"
    /// , where a1 corresponds to seq1, etc.
    /// Throws an exception if compute(...) was not called first
    void Alignment::getAlignment(std::string& hor, std::string& gaps, std::string& vert) const {
    if(!computed)
    throw("Traceback not yet available! Do .compute() first!");
    hor.clear();
    vert.clear();
    gaps.clear();
    hor.resize(iseqh.length()+iseqv.length());
    vert.resize(iseqh.length()+iseqv.length());
    gaps.resize(iseqh.length()+iseqv.length());

    //init at end of map
    unsigned pos;
    unsigned i=hor.length()-1;
    unsigned one_up=iseqh.length()+1;
    if(local){
        pos=sw_maxidx;
    } else {
        pos=map.size()-1;
    }
    while(pos>0){
        entry e=map[pos];
        int v=pos/one_up;
        int h=pos-v*one_up;
        if(local && map[pos].act<=0 && iseqh[h-1]!=iseqv[v-1]){
            break;
        }
        if(e.trace&DIAGONAL){
            //standard fill
            (h>=1) ? hor[i]=iseqh[h-1] : hor[i]='-';
            (v>=1) ? vert[i]=iseqv[v-1] : vert[i]='-';
    
            //fill gaps
            if(h>=1 && v>=1){
                (iseqh[h-1]==iseqv[v-1]) ? gaps[i]='|' : gaps[i]=' ';
                pos-=(one_up+1);
            } else {
                gaps[i]=' ';
                (h>1) ? pos-- : pos-=one_up;
            }
            i--;
        } else if(e.trace&LEFT) {
            if(h>=1){
                hor[i]=iseqh[h-1];
                vert[i]='-';
                gaps[i]=' ';
                pos--;
            } else {
                pos--;
            }
            i--;
        } else if(e.trace&UP) {
            if(v>=1){
                vert[i]=iseqv[v-1];
                hor[i]='-';
                gaps[i]=' ';
                pos-=one_up;
            } else {
                pos--;
            }
            i--;
        }
    }
    hor.erase(0,i+1);
    vert.erase(0,i+1);
    gaps.erase(0,i+1);
    

    }

    ganzer code außer main:

    hier die ganze cpp: https://pastebin.com/F9M0m1Dx

    die hpp :

    https://pastebin.com/VyiskjfE

    passwort: alignment


  • Mod

    Wie kommst du zu der Annahme, die Funktion würde etwas ausgeben? Weil da "output alignment into three strings." in der Anleitung steht? Die zweite Hälfte des Satzes, "into three strings", ist durchaus relevant. Deine "Ausgabe" steht in hor, gaps, und vert, nicht irgendwo in der Konsole. Vielleicht wollte dein Prof prüfen, ob du grundlegende Begrifflichkeiten verstehst.



  • @SeppJ ganz genau! meine erste antwort war auch "keine rückgabe hier" damit schien er iwie weniger zufrieden, weswegen ich schlussfolgerte, dass er eventuell was anderes erwartet hatte, danke für die antwort!


  • Mod

    @lacan_1999 sagte in c++ funktion printet ohne ausgabe?:

    @SeppJ ganz genau! meine erste antwort war auch "keine rückgabe hier" damit schien er iwie weniger zufrieden, weswegen ich schlussfolgerte, dass er eventuell was anderes erwartet hatte, danke für die antwort!

    "Keine Rückgabe" ist auch ganz was anderes als "Keine Ausgabe"! Genau das wollte dein Prof von dir wissen, und ich muss dir leider sagen, deine Antwort war (richtigermaßen) nicht das, was erwartet wurde.


Log in to reply