Probleme mit Arrays und vieles mehr..



  • Hey Leute,

    ich hab ein kleines Programm geschrieben mit dem ich Datensaetze sortieren will,
    aber irgendwie mag ich c++ nich und es mich nicht 😉

    Die Daten hab ich in einem anderem Programm so beschriftet das ich sie hier eigentlich ohne Probleme auslesen koennen sollte,
    die Daten sind wie folgt aufgebaut:
    ä text text ä
    ö zahl zahl ö
    ü zahl zahl ü

    und sollen danach so formatiert in einer zeile wieder ausgegeben werden
    ö zahl zahl ö ä text text ä ü zahl zahl ü

    Jedoch hab ich irgendwo im Code ein Fehlerteufel drin der mich immerwieder in den Debugger schickt und zweitens ist mir auchnoch aufgefallen das in manchen Datensaetzen geschlampt worden ist und es z.B auch mal passiert das nur ein
    ä text text ä oder auchmal nur mit einer zahlen folge, wie kann man das realisieren das nicht alles ins falsche Array reinrutscht??

    Ich hoffe irgendwer blickt in diesen Jungel durch.. 😃 🙄

    #include <iostream>
    #include <stdio.h>
    #include <conio.h>
    #include <fstream>
    using namespace std;
    
    int main () {
        int i,k,l,j,x,y,z;
       char c,in[256],titel[10000][500],acc[10000][10],isbn[10000][10]; 
    
        ifstream is;
        cout << "name of the file ";
        cin.get (in,256);
         is.open (in);  
    
        fstream datei;
        datei.open("finish.txt", ios::out);
    
          while (is.good())     
      {
       c = is.get(); 
     if( c == 'ä')
     {   x=x+1;}
     if(c=='ö')
     { y=y+1;}
     if(c=='ü')
     {z=z+1;}
    
       if( x==2)
       {x=0;
       i++;}
       if( y==2)
       {y=0;
       k++;}
       if( z==2)
       {z=0;
       l++;}
    
       if(x=1)
       {for(i=0;i<10000;i++)
        { for(j=0;j<500;j++)
          { titel[i][j]=j+c;}}}
            if(y=1)
       {for(k=0;k<10000;k++)
        { for(j=0;j<10;j++)
          { acc[k][j]=j+c;}}}
             if(z=1)
       {for(l=0;l<10000;l++)
        { for(j=0;j<10;j++)
          { isbn[l][j]=j+c;}}}
    
    }
       for(i=0;i<10000;i++)
       { for(j=0;j<500;j++)
           { datei << acc[k][j]<<titel[i][j]<< isbn[l][j];}}
    
      datei.close();
      is.close();           
    
      return 0;
    }
    

    Liebe Grueße der Ideenlose



  • Ideelos schrieb:

    Ich hoffe irgendwer blickt in diesen Jungel durch.. 😃 🙄

    Nee, gar nicht. Weder versteh ich die Aufgabenstellung (was genau ist das Sortierkreterium?), noch lädt dein Code zum Lesen ein. Zunächst würde ich mal alle Arrays der Art char[1000][1000] durch std::vectorstd::string ersetzen und vernünftige Namen vergeben, wenn Du mit uns darüber reden möchtest. Eine ordentliche Einrückung würde außerdem der Lesbarkeit dienen.

    http://www.cplusplus.com/reference/stl/vector/
    http://www.cplusplus.com/reference/string/string/



  • Zumal du scheinbar mehrere zusammengehörende Informationen getrennt von einander in mehreren (gleichgroßen? ) Array hälst.

    Da bietet sich dann eine Struktur in Verbindung mit einem Container oder Array an.

    struct MeinStruct
    {
       int a, b, c;
       double foo, bar;
       std::string Text1, Text2;
    };
    
    // Container erzeugen
    std::vector<MeinStruct> MeinContainer;
    
    // Struct anlegen und befuellen
    MeinStruct Data;
    Data.a = 1;
    Data.foo = 3.1415;
    Data.Text1 = "hallo welt";
    
    // Data in Container kopieren
    MeinContainer.push_back( Data );
    
    std::cout << MeinContainer[0].a << std::endl;
    

    vector bietet sich vor allem dann an, wenn du noch garnicht weißt, wieviele Daten anfallen ( z.B. beim Auslesen einer Datei ).
    Wenn du vorher schon genau weißt, wieviele Daten du lagern musst, kannst du natürlich genauso gut ein Array benutzen. Der Fall tritt aber zumindest bei mir selten auf. Meistens benutzt man dann doch einen Container, wie z.B. Vektor. Es gibt auch noch viele andere schöne Container. Du solltest in Erwägung ziehen, dir die mal anzuschauen.



  • Hey It0101,
    wie muesste ich denn nun vorgehen um die Daten reihenweise im vektor gespeichert zu bekommen?
    dein vektor bietet ja nur platz fuer einen datensatz oder seh ich das falsch?

    liebe Grueße



  • Der std::vector bietet platz für eine beliebige Anzahl Daten. It0101 hat aber nur einen in diesen gelegt. Schaue dir das ganze doch mal in der C++ Reference an. Dort findest du auch genügend Beispiele zu den einzelnen Funktionen.

    Prinzipiell gehst du einfach nur so vor wie in dem unteren Beispiel.



  • Ich habe aufghört zu lesen, als ich das gelesen habe:

    ...
    #include <stdio.h>
    #include <conio.h> 
    #include <fstream> 
    using namespace std; 
    
    int main () { 
        int i,k,l,j,x,y,z; 
       char c,in[256],titel[10000][500],acc[10000][10],isbn[10000][10];
    
    ...
    

    - stdio.h ist veraltet, stattdessen <cstdio> inkludieren
    - 8 Variablennamen mit einem Buchstaben Länge... wenn du da in vier Wochen nochmal draufguckst wirst du selbst nicht mehr verstehen, was du damals gemacht hast.
    - statische C Arrays fester Länge, manche davon zweidimensional. Ganz egal, wie groß du deine Arrays dimensionierst, irgendwann bekommtst du Daten, die dein Programm platzen lassen. Alternativen dazu sind std::list, std::vector oder std::deque.
    - It0101s Vorschlag kann ich nur unterstützen, fasse zusammengehörige Daten zu einer Struktur zusammen.



  • if[b](x=1)[/b]
       {for(i=0;i<10000;i++)
        { for(j=0;j<500;j++)
          { titel[i][j]=j+c;}}}
            [b]if(y=1)[/b]
    

Log in to reply