Wort verdrehen?



  • Code::Blocks
    GNU/C



  • Ja, C ist da nicht so empfindlich, ich habe in meinen Beispielen auch strlen benutzt, ohne string.h einzubinden.
    Wenn C auf eine Funktion trifft, die nicht deklariert ist, geht es davon aus, daß die Parameterliste schon stimmen wird, und dass der Rückgabewert int ist.
    Ein C++ - Compiler kompiliert mein Beispiel nicht, wenn #include <string.h> nicht drin steht.
    Man könnte genauso gut printf benutzen, ohne stdio.h zu inkludieren, in C, C++ toleriert das nicht.



  • Hab ich nich...kenn ich nich... 😉 Wenn es so wäre, dann wäre es in "stdlib.h" definiert, weil man denkt, daß "strlen()" zu den Standardfunktionen gehört (was ich auch persönlich finde 😉 ) "strrv" dürfte aber nicht definiert sein...?



  • Belli schrieb:

    Ja, C ist da nicht so empfindlich, ich habe in meinen Beispielen auch strlen benutzt, ohne string.h einzubinden.
    Wenn C auf eine Funktion trifft, die nicht deklariert ist, geht es davon aus, daß die Parameterliste schon stimmen wird, und dass der Rückgabewert int ist.
    Ein C++ - Compiler kompiliert mein Beispiel nicht, wenn #include <string.h> nicht drin steht.
    Man könnte genauso gut printf benutzen, ohne stdio.h zu inkludieren, in C, C++ toleriert das nicht.

    Achso... 😉



  • #include <stdio.h>
    
    int stringLen(const char *s);
    void stringRev(char *s);
    void charSwap(char *a, char *b);
    
    int main()
    {
    	char s[] = "abcde";
    
    	printf("In: %s\n", s);
    
    	stringRev(s);
    
    	printf("Out: %s\n", s);
    
    	return 0;
    }
    
    int stringLen(const char *s)
    {
    	const char *ptr = s;
    
    	for (ptr = s; *ptr; ++ptr);
    
    	return ptr - s - 1;
    }
    
    void stringRev(char *s)
    {
    	const int len = stringLen(s);
    
    	int i;
    
    	for (i = 0; i <= len / 2; ++i)
    		charSwap(&s[i], &s[len - i]);
    }
    
    void charSwap(char *a, char *b)
    {
    	const char tmp = *a;
    
    	*a = *b;
    	*b = tmp;
    }
    

Anmelden zum Antworten