[C/C++] [C] eigene toupper()-Funktion programmieren

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von foo(), 24. Juni 2007 .

Schlagworte:
  1. 24. Juni 2007
    [C] eigene toupper()-Funktion programmieren

    Mahlzeit!

    In einer Übungsaufgabe wurde verlangt, dass wir eine eigene toupper-Funktion in C programmieren, wobei es uns verboten war, etwaige string-Headerdateien einzubinden.

    Eine Lösung schaut folgendermaßen:

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    
    void toupper(char *BU, char *GE) {
     int i = 0;
    
     while(BU[i] != '\0') {
     if((BU[i] >= 'a') && (BU[i] <= 'z'))
     GE[i] = BU[i] - 32;
     else
     GE[i] = BU[i];
    
     i++;
     }
    }
    
    int main(int argc, const char * argv[]) {
     char foo1[7] = "string";
     char foo2[7] = "000000";
    
     toupper(foo1, foo2);
    
     printf("%s", foo2);
    
     return 0;
    }
    
    Jedoch suche ich auch nach einer Lösung, welche mit nur einem Parameter klarkommt, sodass man sich den zweiten String in der main() (hier foo2) sparen könnte...

    mein Ansatz sieht folgendermaßen aus:

    Code:
    char* toupperAgain(char *str) {
     int i = 0;
     char *strRes;
    
     while(str[i] != '\0') {
     if((str[i] >= 'a') && (str[i] <= 'z'))
     strRes[i] = str[i] - 32;
     else
     strRes[i] = str[i];
    
     i++;
     }
    
     return strRes;
    }
    

    Nur will das leider nicht so ganz klappen

    Hat vielleicht von euch jemand eine Idee, wie man die toupper-Funktion realisieren könnte, mit nur einem Parameter???

    Vielen Dank!


    Greets und einen schönen Abend noch!
    foo()
     
  2. 25. Juni 2007
    AW: [C] eigene toupper()-Funktion programmieren

    Du solltest vll mal erwaehnen, was genau das Problem ist. Was mir beim Ueberblicken der 2. Loesung auffaellt, strRes ist einfach ein Zeiger, der nirgendwohin zeigt und es fehlt die Nullterminierung von strRes.
     
  3. 25. Juni 2007
    AW: [C] eigene toupper()-Funktion programmieren

    N'Abend!

    Probier's mal folgendermaßen:
    Code:
    char* toupper(char *str) {
     int i = 0, len;
     char *strRes;
     
     len = sizeof(str);
     
     strRes = (char *) malloc(len * sizeof(char*));
     
     while(str[i] != '\0') {
     if((str[i] >= 'a') && (str[i] <= 'z'))
     strRes[i] = str[i] - 0x20;
     else
     strRes[i] = str[i];
     
     i++;
     }
     
     return strRes;
    }
    

    greets dshock
     
  4. 25. Juni 2007
    AW: [C] eigene toupper()-Funktion programmieren

    Von mir ne Version mit Inline-ASM (für x86)^^

    Code:
    char* uppercase(char *strIn)
    {
     int i = 0;
     char *strOut;
    
     _asm {
     mov esi, strIn;
    
     l_notnull:
     inc ecx;
     cmp [esi], 0;
     jz l_null;
     inc esi;
     jmp l_notnull;
    
     l_null:
     mov i, ecx;
     }
    
     strOut = (char*) malloc(i);
    
     _asm {
     mov esi, strIn;
     mov edi, strOut;
     mov ecx, i;
     sub ecx, 2;
    
     mov [edi+ecx+1], 0;
    
     l_toupper:
     mov al, byte ptr [esi+ecx];
     cmp al, 'a';
     jl l_xchange;
     cmp al, 'z';
     jg l_xchange;
    
     sub al, 0x20;
    
     l_xchange:
     mov byte ptr [edi+ecx], al;
     dec ecx;
     jnz l_toupper;
     
     mov al, [esi];
     
     cmp al, 'a';
     jl l_xchange2;
     cmp al, 'z';
     jg l_xchange2;
    
     sub al, 0x20
    
     l_xchange2:
     mov [edi], al;
     }
    
     return strOut;
    }
    
    mfg r90
     
  5. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.