Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

นับตัวอักษร ตัวเลข และอักขระพิเศษใน String ด้วยภาษา C


โจทย์

นับจำนวน: ตัวอักษร (Alphabets), ตัวเลข (Digits), อักขระพิเศษ (Special Characters) ใน String

ตรรกะการทำงาน


for (i = 0; string[i] != '\0'; i++) {
    if (isalpha(string[i]))       alphabets++;
    else if (isdigit(string[i]))  digits++;
    else                          special++;
}

ตัวอย่างโปรแกรมสมบูรณ์ (ใช้ ctype.h)

#include <stdio.h>
#include <ctype.h>  // สำหรับ isalpha, isdigit

int main() {
    char string[100];
    int alphabets = 0, digits = 0, special = 0;
    int i;
    
    printf("Enter a string: ");
    fgets(string, sizeof(string), stdin); // ใช้ fgets แทน gets (ปลอดภัย)
    
    // ลบ newline ถ้ามี
    string[strcspn(string, "\n")] = '\0';
    
    for (i = 0; string[i] != '\0'; i++) {
        if (isalpha(string[i]))
            alphabets++;
        else if (isdigit(string[i]))
            digits++;
        else
            special++;
    }
    
    printf("Alphabets: %d\n", alphabets);
    printf("Digits: %d\n", digits);
    printf("Special characters: %d\n", special);
    
    return 0;
}

ผลลัพธ์ตัวอย่าง:


Enter a string: Hello World 123!
Alphabets: 10
Digits: 3
Special characters: 2

ฟังก์ชันใน <ctype.h> ที่เกี่ยวข้อง

วิธีทำแบบ Manual (ไม่ใช้ ctype.h)


if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) alphabets++;
else if (c >= '0' && c <= '9') digits++;
else special++;

⚠️ วิธี Manual ใช้ได้เฉพาะ ASCII เท่านั้น ไม่รองรับ Unicode/Locale

ข้อแนะนำ

  • ใช้ fgets() แทน gets() (ปลอดภัย ป้องกัน Buffer Overflow)
  • ใช้ <ctype.h> สำหรับ Portability รองรับ Locale
  • ระวัง Signed Char ปัญหา กับ ctype.h (ควร Cast เป็น unsigned char)
ฟังก์ชันตรวจสอบ
isalpha(c)เป็นตัวอักษร A-Z, a-z
isdigit(c)เป็นตัวเลข 0-9
isalnum(c)เป็นตัวอักษรหรือตัวเลข
isspace(c)เป็น whitespace (space, tab, newline)
ispunct(c)เป็นเครื่องหมายวรรคตอน
islower(c)เป็นตัวพิมพ์เล็ก
isupper(c)เป็นตัวพิมพ์ใหญ่