String verarbeitung(find)



  • Abend, ich hab da so ein Problem mit meinem Code.
    Er soll mir die Position des letzten Zeichen von dem hier "\" ermitteln.
    Das Problem ist in meinem Pfad sind Leerzeichen enthalten, ab dem Leerzeichen findet er keine "\" mehr.

    Bsp:
    "C:\Users\blabla\test.txt" -Findet das letzte Zeichen
    "C:\Users\bla bla\ test.txt -Findet das letzte Zeichen nicht sonder das vor dem "bla bla"

    TCHAR szEXEPath[2048]; //TCHAR - SPEICHER
    	GetModuleFileName(NULL, szEXEPath, 2048); //Ausführverzeichniss
    
    	std::string working(szEXEPath); //In String kopieren
    	std::cout << "Working: " << working << std::endl;
    
    	size_t FOUND = 0;
    	for(int ii = 0; ii < working.length(); ii++)
    	{
    		FOUND = working.find("\\", FOUND+1); //Hier ist das Problem
    	}
    

    Wie kommt das Problem jetzt zu stande, und wie kann ich es lösen?



  • Du suchst also den letzten Backslash? Warum nutzt du da für nicht rfind oder find_last_of, da du nur ein einzelnes Zeichen suchst? Dein jetziger Code macht wirre Sachen, da du die Suche so häufig widerholst wie du Zeichen hast und nicht abbrichst wenn das gesuchte Zeichen nicht mehr gefunden wird.



  • #include <string>
    #include <iostream>
    
    int main()
    {
        std::string path = "C:\\Users\\bla bla\\ test.txt";
    
        auto pos = path.find_last_of("\\");
    
        if(pos != std::string::npos)
        {
            std::cout << path.substr(pos);
        }
    }
    


  • Danke an alle, wieso bin ich da nicht drauf gekommen.
    👍 😃


Log in to reply