将二维双数组与一维字符串数组一起排序时出现问题。 这是一个工作程序,我一直在尝试从文件串和双倍的输入中学习C++,并把它们放进他们的透视数组中。我一直坚持的是,在对字符串进行排序时,我想按升序对双打数组进行排序,并将分数与它们关联的名称保持一致。在我继续学习如何操作向量之前,我试图不使用向量来学习它,这就是为什么在任何人要求之前不使用向量的原因。 最好是对2d数组的列进行排序,而不是使用1d数组对它们进行排序,还是只使用一条语句来完成这一切?对于这个应用程序,最好的排序算法是什么? 到目前为止,我的尝试都失败了,所以我向这里的社区寻求帮助。逻辑很可能是我尚未掌握的一些简单概念。我们都必须从某个地方开始。提前感谢您的帮助 #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"; } }

将二维双数组与一维字符串数组一起排序时出现问题。 这是一个工作程序,我一直在尝试从文件串和双倍的输入中学习C++,并把它们放进他们的透视数组中。我一直坚持的是,在对字符串进行排序时,我想按升序对双打数组进行排序,并将分数与它们关联的名称保持一致。在我继续学习如何操作向量之前,我试图不使用向量来学习它,这就是为什么在任何人要求之前不使用向量的原因。 最好是对2d数组的列进行排序,而不是使用1d数组对它们进行排序,还是只使用一条语句来完成这一切?对于这个应用程序,最好的排序算法是什么? 到目前为止,我的尝试都失败了,所以我向这里的社区寻求帮助。逻辑很可能是我尚未掌握的一些简单概念。我们都必须从某个地方开始。提前感谢您的帮助 #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"; } },c++,sorting,multidimensional-array,C++,Sorting,Multidimensional Array,为了便于学习,可以使用冒泡排序。气泡排序非常简单,效率也很低,速度也很慢。在实际应用程序中,您将使用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

为了便于学习,可以使用冒泡排序。气泡排序非常简单,效率也很低,速度也很慢。在实际应用程序中,您将使用
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";
    }
}
模板
无效气泡排序(T*num,int num\u计数)
{
对于(int i=0;i<(num_count-1);i++)
对于(int j=i+1;jnum[j])
交换(num[i],num[j]);
}
void ArraySort(字符串str[],双数值[][3],整数str\u计数)
{
int num_count=3;
气泡排序(str、str计数);
对于(int i=0;icout出于学习目的,您可以使用冒泡排序。冒泡排序非常简单,效率也非常低,速度也很慢。在实际应用程序中,您可以使用
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";
    }
}
模板
无效气泡排序(T*num,int num\u计数)
{
对于(int i=0;i<(num_count-1);i++)
对于(int j=i+1;jnum[j])
交换(num[i],num[j]);
}
void ArraySort(字符串str[],双数值[][3],整数str\u计数)
{
int num_count=3;
气泡排序(str、str计数);
对于(int i=0;i我想你想做的是:

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";
    }

}
void数组排序(字符串x[],双y[][3],整数长度)
{
int i,j,k;
字符串值;
双重价值;
双达雷[3];
对于(i=1;i=0&&x[j]>sValue;j--)
{
x[j+1]=x[j];
对于(k=0;k<3;k++)
{
y[j+1][k]=y[j][k];
}
}
x[j+1]=S值;
对于(k=0;k<3;k++)
{
y[j+1][k]=dArray[k];
}
}
对于(k=0;k=0&&y[k][j]>d值;j--)
{
y[k][j+1]=y[k][j];
}
y[k][j+1]=d值;
}
}

我想你想做的是:

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";
    }

}
void数组排序(字符串x[],双y[][3],整数长度)
{
int i,j,k;
字符串值;
双重价值;
双达雷[3];
对于(i=1;i=0&&x[j]>sValue;j--)
{
x[j+1]=x[j];
对于(k=0;k<3;k++)
{
y[j+1][k]=y[j][k];
}
}
x[j+1]=S值;
对于(k=0;k<3;k++)
{
y[j+1][k]=dArray[k];
}
}
对于(k=0;k=0&&y[k][j]>d值;j--)
{
y[k][j+1]=y[k][j];
}
y[k][j+1]=d值;
}
}

我能建议你对数字集合进行重新排序,并在两个独立的操作中对集合中的数字进行排序。试试看,告诉我们你需要帮助的操作。我建议你对数字集合进行重新排序,并在两个独立的操作中对集合中的数字进行排序。试试看,告诉我们你需要帮助的操作。这就是解决了我的困境。看过这部作品后,我现在更好地理解了我的逻辑错误来自何处。非常感谢。@mrbw我的荣幸。另外请注意,两种排序算法中哪一种先出现并不重要。这解决了我的困境。看过这部作品后,我现在更好地理解了我的逻辑错误来自何处。谢谢非常感谢。@mrbw我很乐意。另外请注意,两种排序算法中哪一种先到并不重要。