[C++] String auswerten



  • Hi,
    ich moechte einen String auswerten, und nur einen bestimmten Teil dieses Strings weiterverwenden. Allerdings ist dieser String benutzerabhängig, und zudem auchnoch das argv[0]...
    Dementsprechend also der Pfad zzgl. des Programmnamens.

    z.b.:

    C:\Dokumente und Einstellungen\Administrator\Desktop\programm.exe
    

    Ich moechte nun den String so auswerten, das mithilfe eines Unterprogramms das argv[o] in einen String übergeben wird, und dort mittels einer z.B.: Kopfgesteuerten Schleife (for), so ausgewertet wird, das lediglich der letzte Teil (hier: programm.exe) in einen neuen String übergeben wird.

    #include "stdafx.h"
    #include "string.h"
    
    int korrektur(char *);
    
    int main (argc, argv[1])
    {
        korrektur(argv[0]);
    }
    
    int korrektur(char feld [100])
    {
        char korrigiert [20];
    
        for()...
    
        return korrigiert;
    }
    


  • schöner beitrag, kann man lesen doch ich glaube ich gebe dir eine 4 ausführung ok aber deine message ist glaub nicht angekommen. kurz und knapp : Was willst du ?



  • Hier mein Jahrhundert-Killer-Algorithmus:

    1. Mit strlen(...) die Länge des strings ermitteln.
    2. Von rechts nach links durch den string laufen und abbrechen, wenn du den ersten bzw. letzten Backslash findest. Index merken.
    3. mit strncpy() aus dem übergebenen string den Inhalt vom gemerkten Index an bis zum Ende des strings in den korrigierten string kopieren.



  • #include "stdafx.h"
    #include "string.h"
    
    char* dateiname(char *vollPfad){
       char* dateiname=vollPfad;//das ergebnis
       for(char* pos=volPfad;*pos!='\0';++pos)//durch den string laufen
          if(*pos=='\\')//wenn backslash gefunden
             dateiname=pos+1;//dann beginnt der dateiname genau dahinter
       return dateiname;
    }
    
    int main (argc, argv[1])
    {
        cout<<dateiname(argv[0]);
    }
    


  • Weltwunder schrieb:

    Hier mein Jahrhundert-Killer-Algorithmus:

    1. Mit strlen(...) die Länge des strings ermitteln.
    2. Von rechts nach links durch den string laufen und abbrechen, wenn du den ersten bzw. letzten Backslash findest. Index merken.
    3. mit strncpy() aus dem übergebenen string den Inhalt vom gemerkten Index an bis zum Ende des strings in den korrigierten string kopieren.

    Hab ich ja schon probiert, das problem liegt aber leider darin, das es sich bei dem zu überprüfenden String um argv[0] handelt... 😞 ... daher meckern strcpy undsoweiter rum, das der 1Parameter nicht mit dem 2ten zusammenpassen würde

    ____________________________________________________________________________________________________

    Ok, sry ... habs Problem grad gelöst ^^

    char* dateiname(char *vollPfad)
    {
    	int i,x,y;
    	int laenge;
    	int pos;
    	char* dateiname=vollPfad;
    	char korrigiert [20];
    	laenge = strlen (dateiname);
    
    	for (i=laenge; i>0; i--)
    	{
    		if (dateiname[i] == '\\')
    		{
    			pos = i+1;
    			i=0;
    		}
    	}
    
    	sprintf (korrigiert, "%c", dateiname[pos]);
    	for (y=pos+1 , i=1; y < laenge; y++, i++)
    	{
    		korrigiert[i] = dateiname[y];
    		x=i;
    
    	}
    	korrigiert[x+1] = '\0';
    	strcpy(prog.korrigiert, korrigiert);
    
    	return 0;
    }
    


  • da wir uns hier in der C++ sparte befinden würde ich das eher mittels std::string so machen:

    #include <string>
    //...
    std::string path=argv[0];
    size_t pos=path.find_last_of('\\')+1;
    std::string file=path.substr(pos,  path.size()-pos);
    


  • #include <string>
    //...
    std::string path = argv[0];
    std::string::size_type pos = path.find_last_of('\\') + 1;
    std::string file_name = path.substr(pos);
    

    so wäre es dann wohl einfacher 🙂



  • Du solltest

    int pos;
    

    initialisieren. Wenn kein Backslash im Namen auftaucht, dann könnte es crashen.



  • was spricht eigentlich gegen meine lösung?



  • Deine Kommentare :p 😉



  • volkard schrieb:

    was spricht eigentlich gegen meine lösung?

    eigentlich nix aber schau dir mal deine main funktion an 😃 .
    abgesehen von der eigentlichen arbeit die dein code (im unterschied zu dem von "die eule") verrichtet, hast du fast alle fehler
    großzügig übernommen (#include "...", int main(argc, argv[1]))

    😉



  • tja, hab den code halt nicht getestet.

    #include <iostream>
    #include <string>
    #include <algorithm>
    using namespace std;
    
    char const* dateiname(char const* vollPfad){ 
       char const* dateiname=vollPfad;//das ergebnis 
       for(char const* pos=vollPfad;*pos!='\0';++pos)//durch den string laufen 
          if(*pos=='\\')//wenn backslash gefunden 
             dateiname=pos+1;//dann beginnt der dateiname genau dahinter 
       return dateiname; 
    } 
    
    int main (int argc, char* argv[]) 
    {
        cout<<dateiname(argv[0])<<'\n';
    	//oder zum weiterverarbeiten
    	string d=dateiname(argv[0]);
    }
    

Anmelden zum Antworten