verständnis problem bei programm



  • Hallo Leute!

    Wir haben in der schule folgende Aufgabe bekommen:

    Schreibe eine Funktion, die mit Hilfe von Zeigern einen String str1 mit einem anderen
    zweiten String str2 vergleicht.
    Ist str1 kleiner als str2 wird -1, ist str1 grösser als str2 wird 1 und bei Gleichheit wird 0
    zurückgegeben.

    Du sollst aber nur Zeiger verwenden!

    Jetzt habe ich das mal probiert aber das programm lässt mich nur die zwei strings eingeben mehr macht es nicht:

    #include <stdio.h>

    void func(char *f1, char *f2)

    {
    int erg;

    if(*f1>*f2)
    {
    erg=1;
    }

    else if(*f1<*f2)
    {
    erg=-1;
    }

    else if(*f1==*f2)
    {
    erg=0;
    }

    }

    int main()
    {
    char feld1[10];
    char feld2[10];
    int i;

    char *f1[10];
    char *f2[10];

    scanf("%s", feld1);
    scanf("%s", feld2);

    *f1=feld1;
    *f2=feld2;

    func(feld1, feld2);

    return 0;

    }

    könnt ihr mir erklären was hier falsch ist? Ich bin ein Anfänger also nehmt es mir nicht übel^^

    thanks im vorhinein!!!

    lg Denat



  • Ich glaube, da ist ein grundsaetxliches Problem bezueglich des Verstaendnisses der Natur eines Strings - C hat hier eine andere Herangehensweise wie C++ (std::string) oder Pascal oder Java.

    Es gibt hierfuer schon Function in der string.h:

    http://www.cplusplus.com/reference/clibrary/cstring/strcmp/



  • ehm leider dürfen wir das nicht so machen wie du sagst weil...

    wir nur zeiger verwenden dürfen!!
    und wir keine hilfsfunktionen von anderen bibliotheken verwenden dürfen!



  • Denat schrieb:

    ehm leider dürfen wir das nicht so machen wie du sagst weil...

    wir nur zeiger verwenden dürfen!!
    und wir keine hilfsfunktionen von anderen bibliotheken verwenden dürfen!

    Zunaechst weiss nicht wie eine Funktion dieser Art nicht ueber einen Zugriff von Art:

    int MyStrComp (const char  *szIn_0, const char  *szIn_1);
    

    laufen soll. Andererseits waere es sicher hilfreich zu wissen was hier mit "grösser" denn genau gemeint sein soll: Die Laenge, die lexikalische Ordnung oder ... was sonst?



  • also zum beispiel das wort hallo ist größer als wie text weil hallo 5 buchstaben und text nur 4 buchstaben hat

    so ist das gemeint.

    sorry bin halt ein anfänger aber falls du es weist bitte erklärs mir ich will unbedingt wissen wie^^

    und dasr problem ist das man das mit zeigern machem uss und ich weis nicht wie.



  • Gaebe viele Moeglichkeiten - z.B.:

    int GetScoreStr (const char  *szIn)
    {
        int   iReturn  = 0,
              iLoop    = 0,
              iCounter = 1;
    
        while (szIn [iLoop] != '/0')
        {
            iReturn += zIn [iLoop] * iCounter;
            iCounter *= 256;
            iLoop++;
        }
    
        return iReturn;
    }
    
    int MyStrComp (const char  *szIn_0, const char  *szIn_1)
    {
        int    iScore_0,
               iScore_1;
    
        iScore_0 = GetScoreStr (szIn_0);
        iScore_1 = GetScoreStr (szIn_1);
    
        if (iScore_0 == iScore_1)
            return 0;
        else if (iScore_0 > iScore_1)
            return 1
        else
            return (-1);
    }
    

    Eine Moeglichkeit ...



  • vielen dank für deine antworten aber...

    ich bin leider ein anfänger und deine antworten sind zu intelligent für mich also könntest du mir das erklären oder das programm einfacher machen oder so??

    ich will die lösung ja auch verstehen und nicht einfach kopieren und dan in der schule abgeben oder so da hab ich nichts davon. Vielleicht könntest du das programm das ich geschreiben habe einfach so verbessern und modifizierneb bis es geht und mir dann erklären oder so??

    thanks



  • while( str1 && str2 && *str1 && *srt2 )
    {
    	if( *str1++ != *str2++ )
    	...
    }
    

    so oder so ähnlich - der Rest ist deine Hausaufgabe.



  • Denat schrieb:

    also zum beispiel das wort hallo ist größer als wie text weil hallo 5 buchstaben und text nur 4 buchstaben hat

    so ist das gemeint.

    sorry bin halt ein anfänger aber falls du es weist bitte erklärs mir ich will unbedingt wissen wie^^

    und dasr problem ist das man das mit zeigern machem uss und ich weis nicht wie.

    Bist du sicher, dass du die Hausaufgabe richtig verstanden hast. Meiner Meinung nach sollen nicht die String Längen sondern deren Inhalt verglichen werden. Sowas wie

    Hello > Hallo

    weil e > a



  • Angugge und verstehen, nicht nur abtippen und abgeben!

    int main(int argc, char *argv[]){
    
    	char		*s1, *s2, string1[10], string2[10];
    	int		back = 0;
    
    	printf("Du gebe 2x mindestens 1 aber nicht mehr als 9 Zeichen ein!\n");
    	scanf("%s", string1);
    	scanf("%s", string2); 
    	s1 = string1;
    	s2 = string2;
    	do{
    		if(*s1 < *s2){
    			back = -1;
    			break;
    		}else if(*s1 > *s2){
    			back = 1;
    			break;
    		}
    		s1++;
    		s2++;
    	}while((*s1 != 0) && (*s2 != 0));
    	printf("Ergebinss : %i\n", back);
    
    	getchar();
    	return 0;
    }
    

    Kommentieren tu ichs jetzt nicht. Musst ja auch was leisten.


Log in to reply