Thắc mắc về hàm sắp xếp tên theo thứ tự A B C

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

//#define _CRT_SECURE_NO_WARNINGS

const  int MAX = 100;
using namespace std;
struct Sinhvien
{
	char MSSV[15];
	char HovaTenLot[30];
	char Ten[10];
	int gioitinh;
	int NamSinh;	 
	float DiemTrungBinh;
};
struct Lop
{
	int Siso;
	char TenLop[10];
	int Khoahoc;
	Sinhvien DSSV[MAX];

};
struct KHOA
{
	int LOP;
	Lop DSL[MAX];
	


};

void Xoa(char s [], int vitrixoa)
{
	int n = strlen(s);// do dai dài chuỗi
	for (int i = vitrixoa+1; i < n; i++)
	{
		s[i - 1] = s[i];
	}
	s[n - 1] = '\0';

}
void tachten(char s[], char ten[])//xoa khoang trang 
{
	 
	for (int i = 0; ; i++)
	{
		if (s[i] == ' ') 
			{
				Xoa(s, i);
			}
		else
		{
			break;
		}
		
	}
}
void Sapxep_ten(KHOA &khoa)
{
	for (int i = 1; i <= khoa.LOP; i++)//dieu kien de chay qua tung lop
	{ 
		cout << "test 1";
		
			for (int j = 1; j <= khoa.DSL[i].Siso; j++)////dieu kien cua Sinhvien thu 2
				for (int k = i+1; k <=khoa.DSL[i].Siso; k++)//dieu kien cua Sinhvien thu 1
				{
					cout << "test 3";
					tachten(khoa.DSL[i].DSSV[k].HovaTenLot, khoa.DSL[i].DSSV[k].Ten);
					tachten(khoa.DSL[i].DSSV[j].HovaTenLot, khoa.DSL[i].DSSV[j].Ten);
					int check1 = strcmpi(khoa.DSL[i].DSSV[k].Ten , khoa.DSL[i].DSSV[j].Ten);
					if (check1>0)
					{
						Sinhvien  temp1;
						temp1 = khoa.DSL[i].DSSV[j];
						khoa.DSL[i].DSSV[j] = khoa.DSL[i].DSSV[k];
						khoa.DSL[i].DSSV[k] = temp1;
					}
					else if (check1 == 0)
					{
						int check2 = strcmpi(khoa.DSL[i].DSSV[k].HovaTenLot, khoa.DSL[i].DSSV[j].HovaTenLot);
						if (check2>0)
						{
							
							Sinhvien temp2;
							
							temp2 = khoa.DSL[i].DSSV[j];
							khoa.DSL[i].DSSV[j] = khoa.DSL[i].DSSV[k];
							khoa.DSL[i].DSSV[k] = temp2;
						}
					}
				
				}
		
				
			
		
	}
}

Cho mình hỏi cách giải quyết ạ, mình xuất ra thì tên vẫn nhu cũ hoặc có cách nào so sánh khác không ạ .!!

Bạn cho 1 vòng lặp để kiểm tra từng kí tự trong Tên. Ví dụ nếu S[i]>A[i] thì đổi chỗ S với A luôn. Còn nếu bằng thì tiếp tục tăng i lên kiểm tra tiếp.

2 Likes

Bạn chưa tách được tên mà.

tachten(char s[], char ten[])

Có tham biến ten mà không hề được dùng.
Hàm này bạn muốn làm gì?
Theo nội dung bạn viết thì nó chẳng liên quan gì đến tách tên cả.
Vòng lặp để làm gì thế? Vô nghĩa!

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