วิธีที่ 1: ใช้ strlwr() (Library Function)
strlwr() ใน <string.h> แปลงสตริงทั้งหมดเป็นตัวพิมพ์เล็ก
#include <stdio.h>
#include <string.h>
int main() {
char str[50];
printf("Enter string: ");
gets(str);
printf("Lowercase: %s\n", strlwr(str));
return 0;
}
วิธีที่ 2: ไม่ใช้ Library - ใช้ ASCII Code
หลักการ: ตัวพิมพ์ใหญ่ 'A'-'Z' มี ASCII 65-90, ตัวพิมพ์เล็ก 'a'-'z' มี ASCII 97-122
ความต่าง = 32 → บวก 32 เข้าไป = ได้ตัวพิมพ์เล็ก
#include <stdio.h>
int main() {
char str[100];
int i;
printf("Enter string: ");
fgets(str, sizeof(str), stdin);
str[strcspn(str, "\n")] = '\0'; // ลบ newline
for(i = 0; str[i] != '\0'; i++) {
if(str[i] >= 'A' && str[i] <= 'Z') {
str[i] = str[i] + 32; // หรือ str[i] |= 32 (bitwise)
}
}
printf("Lowercase: %s\n", str);
return 0;
}
ผลลัพธ์
Enter string: TUTORIALSPOINT Lowercase: tutorialspoint
ขยายความ: แปลงแบบสองทาง (Upper ↔ Lower)
#include <stdio.h>
#include <ctype.h> // สำหรับ toupper, tolower (standard)
int main() {
char str[100];
int i, choice;
printf("Enter string: ");
fgets(str, sizeof(str), stdin);
str[strcspn(str, "\n")] = '\0';
printf("1. To Lower\n2. To Upper\n3. Toggle Case\nChoice: ");
scanf("%d", &choice);
for(i = 0; str[i]; i++) {
switch(choice) {
case 1: str[i] = tolower(str[i]); break;
case 2: str[i] = toupper(str[i]); break;
case 3:
if(islower(str[i])) str[i] = toupper(str[i]);
else if(isupper(str[i])) str[i] = tolower(str[i]);
break;
}
}
printf("Result: %s\n", str);
return 0;
}
ตาราง ASCII อ้างอิง
| Character | ASCII Dec | ASCII Hex | Binary |
|---|---|---|---|
| 'A' | 65 | 0x41 | 0100 0001 |
| 'a' | 97 | 0x61 | 0110 0001 |
| 'Z' | 90 | 0x5A | 0101 1010 |
| 'z' | 122 | 0x7A | 0111 1010 |
สังเกต: บิตที่ 6 (นับจาก 0) แตกต่างกัน - ใช้ XOR 32 (0x20) สลับได้
แนวทางแนะนำ
- ใช้
tolower()/toupper()จาก<ctype.h>- เป็น Standard, รองรับ Locale - เขียนเองด้วย ASCII ได้เฉพาะ ASCII Character Set
- หลีกเลี่ยง
strlwr(),strupr()- Non-standard