Wie an bestimmter Position in der Console ein String löschen?



  • Hallo, ich habe Eingabe Shell, bei der Befehle eingegenen werden wie z.B:

    *cd test*

    jetzt habe ich nun ein Problem, es soll immer dort wo die Cursor Position ist immer ein andere String eingefügt werden, der alte soll immer gelöscht werden, es soll aber nicht die ganze Zeile gelöscht werden!!!!

    hier ist eine Funktion die löscht die ganze zeile:

    void clear_line( string::size_type length, const string &prompt ) 
    {
    	cout.put( '\r' );
    
    	for( string::size_type i = 0; i < ( length + prompt.length( ) ); ++i ) 
    	{
    		cout.put( ' ' );
    	}
    
    	cout << '\r' << prompt << flush;
    }
    

    wie kann man im folgenden string an der Position X ein neuen String einfügen?

    string test = "cd X";
    
    -> cd TEST
    -> cd HALLO
    -> cd bla bla 
    ...
    




  • Hab es nun so gemacht:

    string clear_TabInput(string input, const string &prompt, string objectFile)
    {	
    	cout.put( '\r' );
    
    	for( string::size_type i = (prompt.length() + input.length()); i < 80; ++i ) 
    	{
    		cout.put( ' ' );
    	}
    
    	input.append(objectFile.c_str(), 0, objectFile.length());
    
    	cout << '\r' << prompt << flush;	
    
    	return input;		
    }
    

    input ist der bis jetzt eingegeben Befehl: cd
    prompt ist am Anfang der Zeile: :\>
    objectFile ist der String der an der bestimmten Stelle [CURSOR-POSITION] eingesetzt wird

    :\>cd [CURSOR-POSITION]
    :\>cd        [[CURSOR-POSITION]]
    

    Wie man erkenne kann will ich die TAB-Vervollständigung in einer Shell implementieren was auch schon klappt 🙂
    Ihr könnt das auch in cmd.exe ausprobieren da gibt es die Funktion schon.

    Jetzt muss ich ein Algorithmus erstellen wobei ein angefangenes Wort mit TAB-Vervollständigt wird, z.B.

    [b]cd w[TAB] = cd windows[/b]
    

    Wie würdet ihr das lösen?


Anmelden zum Antworten