Dateiendung in string kopieren



  • Hallo, bin noch Anfängerin und stehe vor folgender Aufgabe:
    Es wird ein string (Dateiname als Inhalt) an die Funktion endung() übergeben, welche dann einen string mit der Dateiendung zurückgeben soll.
    Das Programm liefert als Ausgabe nur '...'.
    Kann mir jemand weiterhelfen?

    using namespace std;
    #include<iostream>
    #include<string>
    #include<cstdlib>
    
    string endung(string);
    
    int main()
    {
        string result;
        string str;
        int anzahl;
        cout<<"Dateinamen mit Datei-Endung eingeben eingeben:"<<endl;
        cin>>str;
        result=endung(str);
        cout<<result;
    }
    
    string endung(string name)
    {
        string help;
        bool punktvorkommen=false;
        for(int i=0;i<name.length();i++)
        {
            if(name[i]=='.')
            {
                punktvorkommen=true;
                for(int j=i+1;j<name.length();j++)
                {
                    help=help+name[i];
                }
            }
        }
        if(punktvorkommen) return help;
        else return 0;
    }
    


  • hat sich erledigt...

    hier

    help=help+name[i];
    

    muss natürlich

    help=help+name[j];
    

    stehen.


  • Mod

    Wenn du std::string nutzt, dann nutze ihn auch!

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    string endung(const string& filename)
    {
      size_t dot_pos = filename.find_last_of('.');
      return filename.substr(dot_pos + 1, string::npos);
    }
    
    int main()
    {
        cout << "Dateinamen mit Datei-Endung eingeben eingeben:\n";
        string dateiname;
        cin >> dateiname;
        cout << endung(dateiname) << '\n';
    }
    

    Muss man ja schließlich nicht alles zum 347487574993ten Mal (schlecht) neu erfinden.



  • Ich versteh deine Lösung nicht wirklich 😞

    Außerdem wird mit

    cin>>str;
    

    nur bis zu einem Leerzeichen eingelesen.
    Das kann Probleme verursachen.
    Besser gehts mit

    std::getline(std::cin, str)
    

    http://www.cplusplus.com/reference/string/getline/
    Versuchs mal so:

    std::string endung(const std::string& s)
    {
        return s.substr(s.find_last_of('.')+1, s.length());
    }
    

    http://www.cplusplus.com/reference/string/string/substr/
    http://www.cplusplus.com/reference/string/string/find_last_of/

    Edit: Boaa aber sowas von zu spät..


Anmelden zum Antworten