Frage zu Strings...



  • wieso ein char array?
    dadurch werden die chars für den vergleich nach int gecasted und die ASCII repräsentation wird verglichen.
    sicher nicht was du wolltest 🙂



  • Hm, das ist immer eigentlich noch das gleiche Problem wie gestern Abend. Ich weiß nicht, wie ich in C eine Benutzereingabe programmiere, die dem Benutzer erlaubt ein int array mit int-Zahlen zu belegen; getrennt z.B. durch Leerzeichen. Folgende Eingabe soll es verdeutlichen:

    Der Benutzer gibt genau das in die Konsole ein:

    12 32 45 56 78 89 123 456 789 -> [ENTER]

    Im Array soll dann folgendes stehen:

    -----------------------------------------------------------------------------
    | 12|032| 32|032| 45|032| 56|032| 78|032| 89|032|123|032|456|032|789|032|010|
    -----------------------------------------------------------------------------
    

    Irgendwie verstehe ich das aber trotzdem nicht. Denn wie soll man denn nun z.B. die ASCII-Zahl "32" für das Leerzeichen von der Zahl 32 die an der zweiten Stelle im Array steht unterscheiden können?



  • bandchef schrieb:

    Hm, das ist immer eigentlich noch das gleiche Problem wie gestern Abend. Ich weiß nicht, wie ich in C eine Benutzereingabe programmiere, die dem Benutzer erlaubt ein int array mit int-Zahlen zu belegen; getrennt z.B. durch Leerzeichen. Folgende Eingabe soll es verdeutlichen:

    Der Benutzer gibt genau das in die Konsole ein:

    12 32 45 56 78 89 123 456 789 -> [ENTER]

    Ich hab Dir doch gestern abend einen funktionierenden Quellcode dafür gepostet ...



  • Du meinst den hier?

    i = 0;
        //getchar();
        scanf("%i", &zahl);
        while(zahl != -1)
        {
            liste[i] = zahl;
            i = i + 1;
            scanf("%i", &zahl);
        }
    


  • Gut, das stimmt... 😃

    Die Abbruchbedingung der Schleife ist aber doch eine -1. Das heißt, damit ich aus der while-Schleife rauskomm, müsste der Benutzer eine -1 reinschreiben. Das ist aber doch auch nicht Sinn der Sache, oder?



  • Ich will mir in meinem Programm die Stelle im Array merken an der die kleinste Zahl gesessen hat.

    Mein Code:

    #include<stdio.h>
    #include<ctype.h>
    #include<string.h>
    
    #define NMAX 100
    
    int main()
    {
    	int zahl, liste[NMAX];
    	int i, j, k, t, kleinste_zahl, hilfs_var, zaehler;
    
    	i = 0;
        scanf("%i", &zahl);
        while(zahl != -1)
        {
            liste[i] = zahl;
            i = i + 1;
            scanf("%i", &zahl);
        }
    
    		kleinste_zahl = liste[0];
    		k = 1;
    		zaehler = 0;
    		for(j=k; j<i; j=j+1)				//Suche der kleinsten Zahl
    		{
    			if(liste[j] < kleinste_zahl)
    			{
    				kleinste_zahl = liste[j];
    				zaehler = liste[j];
    			}
    		}
    
    	printf("kleinste Zahl = %i, Index-Stelle = %i\n\n", kleinste_zahl, zaehler);
    
    return 0;
    }
    

    Ich weiß aber nicht wie ich das machen soll. Im zaehler soll sich das gemerkt werden. Kannst du mir helfen wie das gehen soll?



  • zaehler = j;
    


  • #include<stdio.h>
    #include<ctype.h>
    #include<string.h>
    
    #define NMAX 100
    
    int main()
    {
    	int zahl, liste[NMAX], sortiert[NMAX];
    	int i, j, k, kleinste_zahl, stelle;
    
    	i = 0;
        scanf("%i", &zahl);
        while(zahl != -1)
        {
            liste[i] = zahl;
            i = i + 1;
            scanf("%i", &zahl);
        }
    
    	kleinste_zahl = liste[0];
            stelle = 0;
            for(j=1; j<i; j=j+1)                //Suche der kleinsten Zahl
            {
                if(liste[j] < kleinste_zahl)
                {
                    kleinste_zahl = liste[j];
                    stelle = j;
                }
            } 
    
    		printf("kleinste Zahl = %i, Index-Stelle der Zahl = %i", kleinste_zahl, j);
    
    return 0;
    }
    

    Dieser Code liefert für die Zahlenfolge 5,7,9,8,1,4,3,2 zwar die 1 als kleinste Zahl aber die Stelle stimmt nicht. Er gibt mir als Indexstelle eine 8 aus. In Wirklichkeit ist es aber doch die 4... Ehrlich gesagt, hab ich das auch schon ausprobiert...

    Oder hab ich dich falsch verstanden?



  • Dann schau mal, ob du in deiner Ausgabe die richtige Variable ausgibst 😉



  • Ich hab jetzt meinen Code weiter vervollständigt. Jetzt gibts allerdings das Problem, dass bei der Zahlenreihenfolge 5,7,9,8,1,4,3,2 nach dem 5. Durchlauf die 5 in der "liste" zugleich auch die kleinste Zahl ist. Das bedeutet nun, dass er mir an die 6. Stelle wieder die 5 schreibt, obwohl da die 7 kommen würde. Ich weiß aber jetzt wieder nicht an was das liegt!

    #include<stdio.h>
    #include<ctype.h>
    #include<string.h>
    
    #define NMAX 100
    
    int main()
    {
    	int zahl, liste[NMAX], hilfs_var;
    	int i, j, k, len_liste, kleinste_zahl, stelle;
    
    	i = 0;
        scanf("%i", &zahl);
        while(zahl != -1)
        {
            liste[i] = zahl;
            i = i + 1;
            scanf("%i", &zahl);
        }
    
    	len_liste = i;
    
    	stelle = 0;
    	k = 0;
    	do
    	{
    		kleinste_zahl = liste[k];
    
    			for(j=k; j<len_liste; j=j+1)                //Suche der kleinsten Zahl
    			{
    				if(liste[j] < kleinste_zahl)
    				{
    					kleinste_zahl = liste[j];
    					stelle = j;
    				}
    			}
    
    		hilfs_var = liste[k];
    		liste[k] = kleinste_zahl;
    		liste[stelle] = hilfs_var;
    		k = k + 1;
    	}while(k != len_liste);
    
    	for(i=0; i<len_liste; i=i+1)
    	{
    		printf("%i", liste[i]);
    	}
    
    return 0;
    }
    


  • Sorry, nun bin ich drauf gekommen: es musste ein "kleiner-gleiche" in die if-Abfrage eingebaut werden!

    Danke für eure Hilfe!


Anmelden zum Antworten