String mit WinAPI bearbeiten



  • Möchtegern-Hacker 😛

    nunja hab so gemacht

    char *strstr_(const char *str, const char *cmp)
    	{
    		const char *sz1, *sz2;
    		for (; *str; str++)
    		{
    			if (*str == *cmp)
    			{
    				for (sz1 = str, sz2 = cmp; *sz1 && *sz2; sz1++, sz2++)
    				{
    					if (*sz1 != *sz2)
    						break;
    				}
    				if (str == cmp || *sz2 == 0) return (char*)str;
    			}
    		}
    		return NULL;
    	}
    
    	char *strtok_(char *t, const char *c)
    	{
    		static char *place = NULL;
    
    		if (t)
    			place = t;
    		if (place == NULL)
    			return NULL;
    
    		char *i = strstr_(place, c);
    		if (i)
    		{
    			memset(i,0,lstrlen(c));
    			char *ret = place;
    			place = i + lstrlen(c);
    			return ret;
    		}
    		else
    		{
    			char *ret = place;
    			place = NULL;
    			return ret;
    		}
    	}
    

    danke für eure hilfe .... vlt hilft der code oben ja noch dem ein oder anderen gleich gesinnten. 🙂

    gruß

    mzapp91



  • Mr Evil schrieb:

    Oh Mein Gott - ganze 140KB - wow, dann haben wir echt ein problem!
    (...)
    wie kann ich noch jemanden ins auto steigen lassen ohne das das auto schwerer wird - hmmmmmmm

    Tür auf, Elefant rein, Tür zu.
    👍 🤡



  • manche scheinen die meinung zu haben das das programm schneller ist wenn es kleiner ist #gg

    "verschachtelte schleifen mit lauter vergleichen ist natuerlich performanter als eine interne funktion und da das programm dadurch 100kb kleiner ist, ist das auch gut so"

    ich wiederhole -> OMG, komm mal klar



  • @mzapp91: Geht es Dir um Größe oder Performance?
    Die Bibliothekfunktionen sind optimiert und teilweise sogar in Assembler geschrieben. Auch wenn Deine Executeable größer wird, ist es trotzem schneller.

    Aber mal ganz allgemein: Ich finde es schon sinnvoll, sich über Größe der Anwendung und Performance Gedanken zu machen. Nur weil Maschinen immer 'besser' werden, dürfen Programme ja nicht 'schlechter' werden 😉 .



  • Ich hatte geschrieben, dass es mir auf die Größe ankommt, es gibt auch Projekte bei denen ich nicht so kleinlich bin, bei diesem aber schon. Auf die Geschwindigkeit kommt es mir hier nicht an, ich habe das nur als zusätzliches Beispiel angeführt. Der Speicher der Rechner wird größer, darum müssen nicht die Anwendungen größer werden. Die Rechner werden schneller, dafür müssen nicht die Anwendungen langsamer werden. Es war nur die Grundhaltung die ich vertrete und hatte mit diesem Problem rein garnichts zu tun.

    Grüße

    mzapp91



  • ja aber manchmal muss man ein spagat versuchen, da heisst es denn - entweder speicher - oder geschwindigkeit
    ich pers. achte eher darauf das die performance gut ist als das wenig speicher verwendet wird



  • Bin auch ein Verfechter der "alten" Garde, obwohl ich selbst noch recht jung bin, man sollte immer "verantwortungsvoll" programmieren, das betrifft nicht nur die Größe der erstellten Programme, sondern z.B. auch die Speicher- und Handlefreigabe, inbesondere bei Zugriffen auf Dateien. Ich mag einfach nicht, dass so langsam bei den Programmierern ein gewisser Schlendrian aufkommt, da jetzt die Ressourcen in genügender Menge vorhanden sind, früher war man darauf angewiesen, um jedes Byte zu kämpfen.



  • joa ich bin auch noch ziemlich jung ... 16

    ich sehe es als herausforderung an meine programme so klein wie möglich zu halten, sicher geht performance normalerweise über größe. Nur bei diesem Projekt war bei mir die Größe wichtiger.



  • mzapp91 schrieb:

    Nun stehe ich vor dem Problem, einen String (char*) an einer bestimmten stelle abzuschneiden, diese stelle ist durch ein paar aufeinanderfolgende zeichen festgelegt ( '=' + '\' + 'n'(also = + Endline)), und alles folgende in einer variable zu speichern.

    Wie wäre es hiermit?

    #include <iostream>
    #include <tchar.h>
    
    TCHAR* split_endl( TCHAR* tString )
    {
        TCHAR* pStart; 
        TCHAR* pEnd; 
    	TCHAR* searchString = _T("=\n");
    
        pEnd = _tcsstr(tString, searchString ); 
        pStart = pEnd + _tcslen( searchString); 
    
    	return pStart;
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	TCHAR *inputString = _T("This is a string with =\ntwo lines of text");
    
    	const TCHAR *tStr = split_endl( inputString );
    	std::cout << tStr << std::endl;
    
    	return 0;
    }
    

    Ausgabe:

    two lines of text

    Gruß,
    Frank.



  • @mzapp91: Ich bin dir gleichgesinnt. 🙂


Anmelden zum Antworten