วิธีที่ 1: ใช้ strrev() (Library Function)
strrev() อยู่ใน <string.h> กลับสตริงเก็บไว้ที่ตัวแปรเดิม
#include <stdio.h>
#include <string.h>
int main() {
char str[50];
printf("Enter string: ");
gets(str); // ไม่แนะนำให้ใช้ (unsafe)
strrev(str);
printf("Reversed: %s\n", str);
return 0;
}
วิธีที่ 2: ไม่ใช้ strrev() - สลับตำแหน่ง (Swap)
หลักการ: สลับตัวแรก<->ตัวสุดท้าย ตัวที่ 2<->ตัวสุดท้าย-1 ... จนถึงกึ่งกลาง
#include <stdio.h>
#include <string.h>
int main() {
char str[100];
int i, len;
char temp;
printf("Enter string: ");
fgets(str, sizeof(str), stdin);
// ลบ newline ถ้ามี
len = strlen(str);
if(str[len-1] == '\n') str[--len] = '\0';
// สลับตัวอักษร
for(i = 0; i < len/2; i++) {
temp = str[i];
str[i] = str[len - 1 - i];
str[len - 1 - i] = temp;
}
printf("Reversed: %s\n", str);
return 0;
}
ผลลัพธ์
Enter string: Tutorialspoint Reversed: tniopslairotuT
วิธีที่ 3: ใช้ Pointer (Advanced)
#include <stdio.h>
#include <string.h>
void reverse(char *str) {
char *start = str;
char *end = str + strlen(str) - 1;
char temp;
while(start < end) {
temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
}
int main() {
char str[100];
printf("Enter string: ");
fgets(str, sizeof(str), stdin);
str[strcspn(str, "\n")] = '\0'; // ลบ newline
reverse(str);
printf("Reversed: %s\n", str);
return 0;
}
สรุปการเปรียบเทียบ
| วิธี | ความยาก | ความเร็ว | หมายเหตุ |
|---|---|---|---|
| strrev() | ง่ายที่สุด | เร็ว | Non-standard (Microsoft only) |
| Swap Loop | ง่าย | เร็ว | Standard C, เข้าใจหลักการ |
| Pointer | ปานกลาง | เร็ว | Idiomatic C, ใช้ในระบบจริง |
หมายเหตุ: strrev() ไม่อยู่ใน ANSI C Standard ใช้ได้เฉพาะบางคอมไพเลอร์ (Turbo C, MSVC) ควรเขียนเองเพื่อ Portability