[C] Problem mit den Parametern von int main()

Dankeschön für eure schnelle und wirklich klasse Hilfe.

Mein Progamm sieht nun wie folgt aus:
C++:
#include <stdio.h>

int mystrlen(char *string)
{
    int i=0;
    while(string[i]!='\0')
        i++;
    return i;
}

int main (int argc, char* argv[])
{

int a = 1;
for(; a < argc; ++a)
      printf("%c", argv[a][mystrlen(argv[a])-1]);
printf("\n");
return 0;
}

Nun möchte ich das Programm noch so modifizieren, dass jeweils die Buchstaben an einer ungeraden Position zu Großbuchstaben und an einer geraden Position zu Kleinbuchstaben werden. Ist es ein Sonderzeichen oder eine Ziffer, dann soll es einfach unverändert ausgegeben werden
Hätte dies gerne mit den Funktionen toupperund tolower gemacht, aber diese sind ja nicht erlaubt, weil nur <stdio.h> verwendet werden soll.

Habt ihr zum Lösen dieses Problems einen Vorschlag?

Vielen Dank im Voraus für eure Hilfe.
Mit freundlichen Grüßen
 
Zuletzt bearbeitet von einem Moderator:
Die zwei kannst du auch ganz einfach nachprogrammieren:
C++:
void tolower(char *s)
{
    int i=0;
    while(s[i]!='\0')
    {
        if(s[i]>='A'&&s[i]<='Z')
            s[i]=s[i]-'A'+'a';
        i++;
    }
}

void toupper(char *s)
{
    int i=0;
    while(s[i]!='\0')
    {
        if(s[i]>='a'&&s[i]<='z')
            s[i]=s[i]-'a'+'A';
        i++;
    }
}
 
Vielen Dank für die schnelle Antwort,
hab es leicht modifiziert in das Programm eingebaut und es funktioniert wunderbar.

Eine frage hätte ich noch:
Ich möchte ja an die Funktion void toupper(char *s) in meinem Fall den Buchstaben ausargv[a][mystrlen(argv[a])-1] übergeben.

Die Funktion ist folgende:
C++:
void toupper(char *s) //was muss ich hier der funktion dann noch übergeben?
{  
 if(s >= 'a' && s <= 'z') ///Was muss ich nun hinter den char s schreiben,
          s = s - 'a' + 'A'; // damit s genau den buchstaben von argv[a][mystrlen(argv[a])-1] enthält?
}

Habe mein Problem im CPP Code als Frage reingeschrieben.

Ich würde mich freuen, wenn ihr mir bei diesem Problem helfen könnt.
Mit freundlichen Grüßen
 
Zuletzt bearbeitet von einem Moderator:
Wenn du das ganze mit einzelnen Buchstaben statt Strings machen willst,
änder noch das
char *s
in
char &s
Den Rest der Funktion hast du ja schon entsprechend angepasst
Das wars schon :)

Wenn du keine Referenzen verwenden willst, sondern bei C-Mitteln bleibst, würde das so ausschauen:

C++:
char toupper(char s)
{
    if(s >= 'a' && s <= 'z')
        s = s - 'a' + 'A';
    return s;
}
In dem Fall reicht aber das übergeben allein nicht mehr, du musst auch den Returnwert wieder holen.

Also statt
toupper(argv[a][mystrlen(argv[a])-1]);
das bei der &-Möglichkeit funktionieren würde, kommt
argv[a][mystrlen(argv[a])-1]=toupper(argv[a][mystrlen(argv[a])-1]);
 
Ein großes Dankeschön für die Mühen und den hilfreichen Post. :)

Ich wusste einfach nicht wie es möglich war nur einen Buchstaben untersuchen zu lassen.
Hab die Funktion jetzt in das Programm eingebaut und es funktioniert einwandfrei.
 
Zurück