Char Zahlenfolge in int-Array schreiben



  • Hallo,

    ich brauche eine Funktion, in der ich eine Textdatei in ein char einlese. Diese sieht dann beispielsweis so aus : 37,4,23,34,1,2
    Bis hierhin kein Problem.

    Mein Problem ist jetzt dass ich die einzelnen Zahlen in ein int - Array packen möchte damit ich auf dieser wiederum eine Sortier-Funktion anwenden kann.

    Ich kenne die Funktion atoi(). Jedoch gibt diese nur die erste Zahl wieder.

    Bin in c Neuling und weiß noch nicht was man alles so machen kann.
    Mir fällt nichts ein, wie ich anhand der Funktion atoi() alle Zahlen bekomme.

    Hat jemand eine Idee wie ich das umsetzen könnte. (Nur Idee, Programmieren will ich es selber), oder zumindestens Tipps?

    Danke schonmal


  • Mod

    Also mal klar ausgedrückt: Du hast mit Komma separierte Zahlenwerte in einer Textdatei und möchtest diese sortieren?

    Falls ja, beantworte bitte noch diese Frage:
    Ist die Anzahl der Werte immer gleich oder beliebig?

    Falls nein:
    Beschreibe deine Aufgabe bitte nochmal deutlich.



  • ja also ich habe eine Funktion geschrieben, die eine integer Array übergeben bekommt und diese von klein nach groß sortiert. Das funktiert auch.

    Habe jetzt eine Textdatei in der mit Komma separierte Zahlenwerte stehen welche sortiert werden sollen und die sortierte Reihe soll dann wieder in die Textdatei geschrieben werden.

    In diesem Fall ist die Anzahl der Werte immer gleich.



  • Wenn die Zahl der Werte immer gleich ist und auch keine Leerfelder ala ",," vorkommen, bietet sich sscanf an:

    char *s="37,4,23,34,1,2";
    int i[6];
    if( 6==sscanf(s,"%d,%d,%d,%d,%d,%d",&i[0],&i[1],&i[2],&i[3],&i[4],&i[5]) )
      puts("OK");
    else
      puts("Fehler bei der Auswertung");
    

  • Mod

    Der Schlüssel ist, wie Wutz schon sagt, (f)scanf, damit kann man die Werte gleich im richtigen Format lesen, anstatt den Umweg über Text und atoi zu gehen. Außerdem nutzt man zum sortieren die Standardbibliothek. Da mir langweilig war:

    #include <stdio.h>
    #include <stdlib.h>
    
    #define NUM_VALUES 10
    
    int compare (const void * a, const void * b)
    {
      return ( *(int*)a - *(int*)b );
    }
    
    int main()
    {
      int data[NUM_VALUES];
      int i;
      FILE *file = fopen("example.dat", "r");
    
      if (file)
        {
          for (i = 0; i < NUM_VALUES; ++i)
            {
              if (fscanf(file, "%d,", data + i) != 1)
                {
                  printf("Error reading value %d of %d\n", i+1, NUM_VALUES);
                  return EXIT_FAILURE;
                }
            }
          fclose(file);
        }
      else
        {
          puts("Could not open file: example.dat");
          return EXIT_FAILURE;
        }
    
      qsort(data, NUM_VALUES, sizeof(*data), compare);
       for (i = 0; i < NUM_VALUES; ++i)
        {
          printf("%d\n", data[i]);
        }
       return EXIT_SUCCESS;
    }
    


  • SeppJ schrieb:

    Außerdem nutzt man zum sortieren die Standardbibliothek.

    Aber nicht als Programmierneuling.
    Da schreibt man die einmal zur Übung selber.



  • Die Sortierfunktion schreibt man selber, nicht die Standardbibliothek. 🙂



  • Danke für die schnelle und hilfreichen antworten.

    Habt mir echt geholfen. 🙂

    Mit freundlichen Grüßen,
    Neffes 🙂


Log in to reply