#include <stdio.h>
#include <conio.h>
#include <string.h>
struct Class
{
char *hs;
};
void nhap(char *&a)
{
char b[100];
printf("Nhap ten: ");
gets_s(b);
a = _strdup(b);
}
void nhapClass(Class *&a, int n)
{
for (int i = 0; i < n; i++)
{
nhap(a[i].hs);
}
}
void xuatClass(Class *a, int n)
{
for (int i = 0; i < n; i++)
printf("%s\n", a[i]);
}
char* Name(char *a)
{
char *ch;
ch = new char[10];
int h = -1;
for (int i = strlen(a) - 1; i >= 0; i--)
{
if (a[i - 1] == ' ')
{
for (int k = i; k < strlen(a); k++)
{
h++;
ch[h] = a[i];
}
break;
}
}
return ch;
}
void swap(char *a, char *b)
{
char * temp = a;
a = b;
b = temp;
}
char* Ho(char* a)
{
char *ch;
ch = new char[10];
int h = -1;
for (int i = 0; i < strlen(a); i++)
{
++h;
if (a[i + 1] == ' ')
break;
else
ch[h] = a[i];
}
return ch;
}
void sort_Alphabet(Class *&a, int n)
{
for (int i = 0; i < n - 1; i++)
{
for (int j = i + 1; i < n; j++)
{
if (strcmp(Name(a[i].hs), Name(a[j].hs)) > 0)
swap(a[i].hs, a[j].hs);
else if (strcmp(Name(a[i].hs), Name(a[j].hs)) == 0)
{
if (strcmp(Ho(a[i].hs), Ho(a[j].hs)) > 0)
swap(a[i].hs, a[j].hs);
}
}
}
}
int main()
{
int n;
printf("Nhap so hoc sinh: ");
scanf_s("%d", &n);
Class *a;
a = new Class[n];
getchar();
nhapClass(a, n);
sort_Alphabet(a, n);
xuatClass(a, n);
delete[]a;
_getch();
return 0;
}
Bài toán là hãy sx tên hs theo alphabet nếu trùng tên thì sx theo họ.
Mình code như thế này, không biết lỗi chỗ nào mà nó cứ stopped working hoài.
^^!!

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?