01/10/2018, 15:06
Code sắp xếp học sinh theo Alphabet luôn bị stopped working khi chạy
#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
", 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.
^^!!
Bài liên quan
gets_s
phải truyền thêm size nữa. Bạn nên xem MSDN nhémình dùng trước đó đâu có ta, chỉ v thôi là được rồi chứ ???