Suche Projekt



  • Hallo Leute
    ich würde gern bei einem Projekt helfen das nicht nach 1 Monat auf Eis gelegt wird.

    Was ich biete:
    - gute Kenntnisse in C++
    - gute Kenntnisse im Umgang mit STL und Qt
    - Kenntnisse in Socket

    Was ich mir erhoffe:
    - Gute Zusammenarbeit
    - Weitere Erfahrungsgewinnung in C++ und weiteren Bereichen

    Bitte per PM melden.

    MFG CCodex



  • bool csv_parse(
    	 char       *str
    	,size_t     len
    	,const char field_seperator
    	,const char quote
    	,const char newline
    	,bool       (*cb)(size_t line,size_t field,char *str,size_t len,void *cb_arg)
    	,void       *cb_arg
    ){
       ...
    }
    

    poste doch mal einen funktionskörper (sollten ca. 70 zeilen ohne externe libraries in c sein)...

    @edit: kannst es mir auch per pm schicken. sag mir aber dann bescheid, weil ich die mails nicht tägl. abrufe 😉



  • Inwiefern hilft ihm das bei seiner weiteren "Erfahrungsgewinnung" in C++?



  • Mechanics schrieb:

    Inwiefern hilft ihm das bei seiner weiteren "Erfahrungsgewinnung" in C++?

    kpl. ich sehe dann sofort den leistungsstand. wenn das nicht geht, würde ich ihm auch kein gutes c++ zutrauen.

    vllt. geht das anderen anders und die können das riechen (wobei mein kolben schon echt groß ist...).



  • Mechanics schrieb:

    Inwiefern hilft ihm das bei seiner weiteren "Erfahrungsgewinnung" in C++?

    eig. würde einen die frage schon disqualifizieren, egal ob c oder c++ mir ist keine library funktion der std. libraries bekannt die hilfreich wär.



  • CCodex schrieb:

    - gute Kenntnisse in C++

    Das ist bei C++ leider keine wirklich ausreichende Beschreibung der Fähigkeiten. Wenn man dich etwas einschätzen können soll, dann poste mal irgendwas was du geschrieben hast von dem du denkst, dass es dein Sprachverständnis zeigt. (Also keinen komplizierten Algorithmus, sondern etwas bei dem du dir Gedanken um die Struktur der Software gemacht hast.) Beispielsweise sollten dir bei der Sichtung von Oo's Code sofort folgende Fragen durch den Kopf schießen:
    - bool in C?
    - Warum nicht const char* für str?
    - Warum nicht char für field_seperator, quote und newline?
    etc. Das war von oO bestimmt absichtlich schlechter Code, damit er sieht ob du darauf reagierst. Zudem sollte dir direkt auffallen, dass du C++ und nicht C angegeben hast. Das war sicher auch absicht, er wollte sehen, ob dir sofort auffällt, dass man das in C++ ganz anders lösen würde.



  • Ich programmier nur in C++ und mit C hab ich mich noch nicht so viel beschäftig, aber in C++ könnte ich dir einen Parser schreiben.

    Ich hab mal an meiner eigenen Skriptsprache gebastelt aber bis her nicht weiter gemacht. Hier sind einige Ausschnitte aus dem wenigen Code:

    lexical.h

    #include "token.h"
    
    /**
    * Die Klasse lexical führt die Lexikalische Analyse durch.
    */
    
    class Lexical
    {
        public:
    
        /**
        * SetString läd den zu bearbeiteten String.
        */
    	void setString( string sinput)
    	{
    
    		tpos = 0;
    		input_size = sinput.size();
    		input_str = &sinput;
    
    	}
    
    	/**
    	* getTokenToString gibt zum Token das Zeichen aus.
    	*/
        string getTokenToString()
        {
    
            array< string, 42> list = {
    			"Not In List",
    			"<",
    			">",
    			"<=",
    			">=",
    			"==",
    			"!=",
    			"+",
    			"-",
    			"*",
    			"/",
    			"%",
    			"=",
    			"+=",
    			"-=",
    			"*=",
    			"/=",
    			"%=",
    			"&&",
    			"||",
    			"!",
    			",",
    			";",
    			"(",
    			")",
    			"[",
    			"]",
    			".",
    			":",
    			"ID",
    
    			"VAR",
    			"FUNC",
    
    			"MAIN",
    			"IF",
    			"WHILE",
    			"FOR",
    			"DO",
    			"ELSE",
    			"ARRAY",
    			"INT",
    			"DOUBLE",
    			"STRING"
            };
    
            return list[ ttoken.id];
        }
    
        /**
        * getNextToken gibt die struct Token mit dem jetzigen Token und dazugehörigen Inhalt aus.
        * @return Token mit Inhalt
        */
        Token getNextToken();
    
        private:
    
        Token ttoken;          //!< Token zur rückgabe.
        char *tchar;           //!< Jetzige Buchstaben.
        int16_t tpos;          //!< Jetzige Position.
        int16_t input_size;    //!< Die länge des Input Strings.
        string *input_str;     //!< String mit der momentanen Dateizeile.
    
        /**
        * nextChar erhöht die Variable pos um 1 und übergibt tchar den nächsten Buchstaben.
        * @return tpos, tchar
        */
        void nextChar()
        {
    
            if( tpos < input_size)
            {
    			tchar = (char*)input_str[ tpos ].c_str();
                tpos+=1;
    
            }else{
                tpos = -1;
                return;
            }
    
            return;
        }
    
    	/**
        * good gibt den Status zurück ob man am Ende der Zeile angekommen ist.
        * @return true wenn tpos größer 0 ist.
        */
        bool good()
        {
    
            if( tpos == -1)
            {
                return true;
            }
    
            return false;
        }
    
        /**
        * ignoreSpaces überspringt alle Leerzeichen, Tabulatoren und Zeilenumbrüche.
        */
        void ignoreSpaces()
        {
            while( *tchar == ' ' || *tchar == '\t' || *tchar == '\r' || *tchar == '\n')
            {
                nextChar();
            }
        }
    
        /**
        * ResWords prüft auf Reservierte Wörter und Funtionsnamen zB: main, if, while usw.
    	* Falls diese nicht vorhanden sind werden sie als ID eingetragen.
        * @return true oder false
        */
        bool ResWords();
    
        /**
        * Operators prüft auf Logische, Vergleichs und Arithmetische Operatoren.
        * @return true oder false
        */
        bool Operators();
    
        /**
        * Int_Float prüft auf Interger oder Double Zahlen.
        * @return true oder false
        */
        bool Int_Double();
    
    	//symbole fehlt \" überspringen
    
        /**
        * Symbole prüft auf Zeichen wie: : , ; ( ) [ ] usw.
        * @return true oder false
        */
        bool Symbole(); //Überprüfen ob String oder Char
    
    };
    

    lexical.cpp

    bool Lexical::ResWords()
    {
        string buf;
    
    	while( *tchar != ' ' )
    	{
    
    		buf += *tchar;
    		nextChar();
    
    	}
    
    	if( buf.size() != 1 )
    	{
    
    		for( int16_t i=0; StrStdFunc[i] != " "; i++)
    		{
    
    			if( buf[0] == StrStdFunc[i][0] )
    			{
    
    				if( buf.size() == StrStdFunc[i].size() )
    				{
    
    					if( buf.compare( StrStdFunc[i]) == NULL )
    					{
    
    						ttoken.id = TToken[30 + i];
    
    					}
    
    				}
    
    			}
    
    		}
    
    		if( ttoken.id == T_NIL )
    		{
    
    			ttoken.id = T_ID;
    			ttoken.varname = buf;
    
    		}
    
    	}else
    	{
    
    		tpos -= 1;
    		return false;
    
    	}
    
    	return true;
    }
    

    toke.h

    #include <iostream>
    
    #include <string>
    #include <cstdint>
    #include <array>
    
    #define T_NIL   TToken[0]   /// Not In List
    #define T_EOL	TToken[1]	/// End Of Line
    #define T_GR    TToken[2]   /// <
    #define T_KL    TToken[3]   /// >
    #define T_KG    TToken[4]   /// <=
    #define T_GG    TToken[5]   /// >=
    #define T_GL    TToken[6]   /// ==
    #define T_UG    TToken[7]   /// !=
    #define T_PL    TToken[8]   /// +
    #define T_MI    TToken[9]   /// -
    #define T_MU    TToken[10]   /// *
    #define T_DI    TToken[11]  /// /
    #define T_MO    TToken[12]  /// %
    #define T_G     TToken[13]  /// =
    #define T_PG    TToken[14]  /// +=
    #define T_MG    TToken[15]  /// -=
    #define T_MUG   TToken[16]  /// *=
    #define T_DG    TToken[17]  /// /=
    #define T_MOG   TToken[18]  /// %=
    #define T_AND   TToken[19]  /// &&
    #define T_OR    TToken[20]  /// ||
    #define T_NOT   TToken[21]  /// !
    #define T_KOM   TToken[22]  /// ,
    #define T_SEM   TToken[23]  /// ;
    #define T_LRK   TToken[24]  /// (
    #define T_RRK   TToken[25]  /// )
    #define T_LEK   TToken[26]  /// [
    #define T_REK   TToken[27]  /// ]
    #define T_POI   TToken[28]  /// .
    #define T_DPO   TToken[29]  /// :
    #define T_ID    TToken[30]  /// z.B func1, var1
    
    #define T_VAR		TToken[31]	/// Variable
    #define T_FUNC		TToken[32]	/// Funktion
    #define T_MAIN      TToken[33]  /// main
    #define T_IF        TToken[34]  /// if(): ;
    #define T_WHILE     TToken[35]  /// while(): ;
    #define T_FOR       TToken[36]  /// for(): ;
    #define T_DO        TToken[37]  /// do: while();
    #define T_ELSE      TToken[38]  /**
                                        * if(): else: ;
                                        * if(): else if(): ;
                                        */
    #define T_ARRAY		TToken[39]	/**
    									* array var = {};
    									*/
    
    #define T_INT		TToken[40]	/// var = 1;
    #define T_DOUBLE	TToken[41]	/// var = 1.1;
    #define T_STR		TToken[42]	/**
    									* var = "abc";
    									* var = "a";
    									*/
    
    /**
    * StrStdFunc beinhaltet alle Reservierten Wörter in Zeichenform.
    */
    static array< string, 10> StrStdFunc = {
        "var",
    	"func",
        "main",
        "if",
        "while",
        "for",
        "do",
        "else",
    	"array",
    	""
    };
    
    /**
    * NFunktion beinhaltet fremde Funktionen die nachträglich hinzugefügt worden sind.
    */
    typedef void (*NFunc) (void);
    
    /**
    * Die Struktur Value mit allen Variablen zum Speichern der Werte.
    */
    struct Value
    {
    
        Value() : VChar(), VString(), VInt(), VDouble() {;}
    
        char VChar;
        string VString;
        int VInt;
        double VDouble;
    
    };
    
    /**
    * Die Struktur Token beinhaltet das Token mit den Informationen.
    */
    struct Token
    {
    
        Token() : id(), value(), varname() {;}
    
    	/**
    	* id zeigt die Tokennummer an.
    	*/
        uint8_t id;
    
    	/*
    	* varname beinhaltet die Namen von Variablen und Funktionen.
    	*/
        std::string varname;
    
    	/**
    	* value beinhaltet char, strings, integer und doubles.
    	*/
    	Value value;
    
    };
    

    und an einem .ini Dateienparser aber die hab ich geschrieben als ich angefangen hab c++ zu lernen und dementsprechend sieht auch der Code aus :
    https://sourceforge.net/projects/xini

    Sry das ich nicht mehr zeigen kann.



  • CCodex schrieb:

    Ich programmier nur in C++ und mit C hab ich mich noch nicht so viel beschäftig, aber in C++ könnte ich dir einen Parser schreiben.

    ist sicher keine schlechte übung und wird schnell mal unterschätzt, aber mach dir nicht zu viel hoffnung.

    eig. ist es auch unsinn, weil bis auf eine externe library alles c ist. daher könntest du von uns sicher nicht viel über c++ lernen und wenn das die sprache deiner wahl ist, bist du in einem klassischen c++ projekt sicher besser aufgehoben.


Anmelden zum Antworten