#include <stdio.h>
#include <string.h>
int main(int argc, char** argv)
{
int group_number = 0;
scanf("%d", &group_number);
char*** input;
input = new char**[group_number];
int** order;
order = new int*[group_number];
int* sample_number;
sample_number = new int[group_number];
for (int i = 0; i < group_number; i++)
{
scanf("%d", &sample_number[i]);
input[i] = new char*[sample_number[i]];
for (int j = 0; j < sample_number[i]; j++)
{
input[i][j] = new char[100];
}
for (int j = 0; j < sample_number[i]; j++)
{
scanf("%s", input[i][j]);
}
order[i] = new int[sample_number[i]];
for (int j = 0; j < sample_number[i]; j++)
{
order[i][j] = j;
}
//按照预定的规则进行排序
for (int j = 0; j < sample_number[i] - 1; j++)
{
bool change = false;
for (int k = sample_number[i] - 1; k >= 1 + j; k--)
{
if (strlen(input[i][k]) > strlen(input[i][k - 1]))
{
int temp;
temp = order[i][k];
order[i][k] = order[i][k - 1];
order[i][k - 1] = temp;
}
else if (strlen(input[i][k]) == strlen(input[i][k - 1]))
{
int len = strlen(input[i][k]);
bool equal_change = false;
for (int q = 0; q < len; q++)
{
if (input[i][k][q] < input[i][k - 1][q])
{
equal_change = true;
break;
}
}
if (equal_change)
{
int temp;
temp = order[i][k];
order[i][k] = order[i][k - 1];
order[i][k - 1] = temp;
}
}
}
if (!change)
{
break;
}
}
}
//输出结果
for (int i = 0; i < group_number;i++)
{
printf("Case %d:\n", i + 1);
for (int j = 0; j < sample_number[i]; j++)
{
printf("%s\n", input[i][order[i][j]]);
}
delete []order[i];
for (int j = 0; j < sample_number[i]; j++)
{
delete []input[i][j];
}
delete []input[i];
}
delete []input;
delete []order;
delete []sample_number;
}
追问这道题可以不用指针么 刚刚学C 还没看懂指针
追答不用指针当然也是可以的,但是程序的实用性会受到很大的影响。
追问那不用指针 怎么做呢?
追答见附件,这样的话输入的数据个数很受限