2016-04-18 1 views
0

Dies ist ein Arbeitsprogramm, das ich habe versucht C++ aus diesen Eingaben von einer Datei Strings zu lernen und verdoppelt und legt sie in ihre Perspektive Arrays. Was ich festhalte, ist, während ich die Strings sortiere, will ich das Array der Doubles in aufsteigender Reihenfolge sortieren und die Punktzahlen mit dem Namen behalten, mit dem sie verknüpft sind. Ich versuche es zu lernen, ohne Vektoren zu benutzen, bevor ich weiterführe, um zu lernen, wie man sie manipuliert. Das ist der Grund dafür, keine Vektoren zu benutzen, bevor jemand fragt. Ist es am besten, die Spalten des 2D-Arrays zu sortieren und sie dann mit dem 1D-Array zu sortieren oder einfach nur eine Anweisung zu haben, die alles bietet? Was wäre der beste Sortieralgorithmus für diese Anwendung? Meine Versuche sind bisher alle gescheitert, deshalb wende ich mich hier an die Gemeinde um Hilfe. Die Logik ist wahrscheinlich ein einfaches Konzept, das ich noch zu begreifen habe. Wir müssen alle irgendwo anfangen. Vielen Dank im Voraus für Ihre Hilfe.Problem beim Sortieren von 2d Double Array neben 1d String Array.

#include <stdlib.h> 
#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 

void ArraySort (string x[], double y[][3], int length); 

int main() 
{ 
    ifstream inFile; 

    inFile.open("bowlers2.txt"); 

    const int SIZE = 10; 

    int i,j; 
    double scores[10][3]; 
    string names[SIZE]; 
    string mystring; 

    if (!inFile) 
    { 
     cout << "Can not open the input file" 
      << " This program will end."<< "\n"; 
     return 1; 

    } 

    for(i = 0; i < SIZE; i++) 
    { 
     getline(inFile, names[i]); 
     for(j = 0; j < 3; j++) 
     { 
      getline(inFile, mystring); 
      scores[i][j] = atoi(mystring.c_str()); 
     } 
    } 

    for(int i=0;i<SIZE;i++) 
    { 
     cout << names[i] << "\n"; 
     for(j = 0; j < 3; j++) 
      cout << scores[i][j] << "\n"; 
    } 

    inFile.close(); 

    ArraySort (names, scores, SIZE); 

    return 0; 
} 

void ArraySort (string x[], double y[][3], int LENGTH) 
{ 
    int i,j; 
    string sValue; 
    double dValue; 

    for(i = 1; i < LENGTH; i++) 
    { 
     sValue = x[i]; 
     for(j = i - 1; j >= 0 && x[j] > sValue; j--) 
     { 
      x[j + 1] = x[j]; 
     } 
     x[j + 1] = sValue; 
    } 

    cout << "\n"; 
    for(int i=0;i<LENGTH;i++) 
    { 
     cout << x[i] << "\n"; 
     for(j = 0; j < 3; j++) 
      cout << y[i][j] << "\n"; 
    } 

} 

Datei durch das Programm lesen:

Linus too good 
100 
23 
210 
Charlie brown 
1 
2 
12 
Snoopy 
300 
300 
100 
Peperment Patty 
223 
300 
221 
Pig Pen 
234 
123 
212 
Red Headed Girl 
123 
222 
111 
Marcey 
1 
2 
3 
keith hallmark 
222 
300 
180 
anna hallmark 
222 
111 
211 
roxie hallmark 
100 
100 
2 
+0

Ich rate Ihnen, die Sätze von Zahlen neu zu ordnen und die Zahlen innerhalb der Sätze sortieren in * zwei unabhängige Operationen. * Versuchen Sie das und sagen Sie uns, mit welcher Operation Sie Hilfe brauchen. – Beta

Antwort

2

Ich denke, verwenden, was Sie versuchen, dies zu tun ist:

void ArraySort (string x[], double y[][3], int LENGTH) 
{ 
    int i,j,k; 
    string sValue; 
    double dValue; 
    double dArray[3]; 

    for(i = 1; i < LENGTH; i++) 
    { 
     sValue = x[i]; 
     for (k = 0; k < 3; k++) 
     { 
      dArray[k] = y[i][k]; 
     } 
     for(j = i - 1; j >= 0 && x[j] > sValue; j--) 
     { 
      x[j + 1] = x[j]; 
      for (k = 0; k < 3; k++) 
      { 
       y[j + 1][k] = y[j][k]; 
      } 
     } 
     x[j + 1] = sValue; 
     for (k = 0; k < 3; k++) 
     { 
      y[j + 1][k] = dArray[k]; 
     } 
    } 

    for(k = 0; k < LENGTH; k++) 
     for(i = 1; i < 3; i++) 
     { 
      dValue = y[k][i]; 
      for(j = i - 1; j >= 0 && y[k][j] > dValue; j--) 
      { 
       y[k][j + 1] = y[k][j]; 
      } 
      y[k][j + 1] = dValue; 
     } 
    } 

    cout << "\n"; 
    for(int i=0;i<LENGTH;i++) 
    { 
     cout << x[i] << "\n"; 
     for(j = 0; j < 3; j++) 
      cout << y[i][j] << "\n"; 
    } 

} 
+0

Das löst mein Dilemma. Nachdem ich diese Arbeit gesehen habe, verstehe ich jetzt besser, wo meine logischen Fehler herkommen. Vielen Dank. – mrbw

+0

@mrbw Mein Vergnügen. Beachten Sie auch, dass es egal ist, welcher der beiden Sortieralgorithmen zuerst kommt. – Entropy

1

zu Lernzwecken können Sie Blase Art verwenden. Blasensortierung ist sehr einfach, auch sehr ineffizient und langsam. In einer realen Anwendung würden Sie std::sort

template <typename T> 
void bubble_sort(T *num, int num_count) 
{ 
    for (int i = 0; i < (num_count - 1); i++) 
     for (int j = i + 1; j < num_count; j++) 
      if (num[i] > num[j]) 
       std::swap(num[i], num[j]); 
} 

void ArraySort(string str[], double num[][3], int str_count) 
{ 
    int num_count = 3; 
    bubble_sort(str, str_count); 

    for (int i = 0; i < str_count; i++) 
     bubble_sort(num[i], num_count); 

    cout << "\n"; 
    for (int i = 0; i < str_count; i++) 
    { 
     cout << str[i] << "\n"; 
     for (int j = 0; j < num_count; j++) 
      cout << num[i][j] << "\n"; 
    } 
}