ในปัญหานี้ เราได้รับอาร์เรย์ของสตริง งานคือสร้างโปรแกรม C เพื่อเรียงลำดับอาร์เรย์ของชื่อหรือสตริง โปรแกรมนี้จะเรียงชื่อทั้งหมดที่เราให้ในอินพุตตามลำดับอักษรจากน้อยไปมาก (ascending)
ตัวอย่างเพื่อเข้าใจปัญหา
อินพุต
namesArray = ["Rishabh", "Jyoti", "Palak", "Akash"]
เอาต์พุต
["Akash", "Jyoti", "Palak", "Rishabh"]
เพื่อแก้ปัญหานี้ เราจะใช้ฟังก์ชัน qsort() ของไลบรารีมาตรฐาน เนื่องจากเรารู้จักการเรียงค่าจำนวนเต็ม สิ่งที่เปลี่ยนแปลงคือเราพิจารณาสตริงสำหรับการเปรียบเทียบแทนค่าจำนวนเต็ม
ดังนั้น ตัวเปรียบเทียบ (comparator) ที่ใช้ใน qsort() จะเปลี่ยน และจะใช้ strcmp() เพื่อเปรียบเทียบสตริงใน comparator ด้วยวิธีนี้เราสามารถเรียงอาร์เรย์ของชื่อหรือสตริงได้
โปรแกรม C เรียงลำดับอาร์เรย์ของชื่อหรือสตริง
ตัวอย่างโค้ด
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
static int comparator(const void* str1, const void* str2) {
if (strcmp(*(const char**)str1, *(const char**)str2) >= 0)
return 1;
else
return 0;
}
int main() {
const char* arr[] = {"Rishabh", "Jyoti", "Palak", "Akash"};
int n = sizeof(arr) / sizeof(arr[0]);
printf("\nอาร์เรย์ชื่อที่กำหนด: \t");
for (int i = 0; i < n; i++) printf("%s \t", arr[i]);
qsort(arr, n, sizeof(const char*), comparator);
printf("\nอาร์เรย์ชื่อที่เรียงแล้ว: \t");
for (int i = 0; i < n; i++)
printf("%s \t", arr[i]);
return 0;
}
ผลลัพธ์
อาร์เรย์ชื่อที่กำหนด: Rishabh Jyoti Palak Akash อาร์เรย์ชื่อที่เรียงแล้ว: Akash Jyoti Palak Rishabh