2011-12-23 29 views

Trả lời

71

Bạn sẽ muốn sử dụng các chức năng tiêu chuẩn isalpha()isdigit() trong <ctype.h>.

char c = 'a'; // or whatever 

if (isalpha(c)) { 
    puts("it's a letter"); 
} else if (isdigit(c)) { 
    puts("it's a digit"); 
} else { 
    puts("something else?"); 
} 
10

Cả hai cách này đều không hữu ích. Sử dụng isalpha() hoặc isdigit() từ thư viện chuẩn. Họ đang ở <ctype.h>.

4

Nếu (theChar >= '0' && theChar <='9') đó là chữ số. Bạn có được ý tưởng.

12

<ctype.h> bao gồm một loạt các chức năng để xác định xem char có phải là một chữ cái hoặc một số, chẳng hạn như isalpha, isdigitisalnum.

Lý do tại sao int a = (int)theChar sẽ không làm những gì bạn muốn là vì a sẽ chỉ giữ giá trị số nguyên đại diện cho một ký tự cụ thể. Ví dụ số ASCII cho '9' là 57, và cho 'a' đó là 97.

Cũng cho ASCII:

  • Số - if (theChar >= '0' && theChar <= '9')
  • chữ cái -
    if (theChar >= 'A' && theChar <= 'Z' || theChar >= 'a' && theChar <= 'z')

Hãy nhìn vào một số ASCII table để tự mình xem.

+1

Kiểm tra '0' <= x <= '9' là chính xác cho tất cả các triển khai tuân thủ tiêu chuẩn (ASCII hoặc không phải là không tôn trọng). C yêu cầu các chữ số thập phân có một biểu diễn tiếp giáp. Đối với các chữ cái, tất cả các cược được tắt. – Wiz

+0

@Wiz tốt đẹp! C99 5.2.1: http://stackoverflow.com/a/35936519/895245 –

16

chars chỉ là số nguyên, vì vậy bạn thực sự có thể làm một so sánh thẳng của nhân vật của bạn chống lại literals:

if(c >= '0' && c <= '9'){ 

này áp dụng cho tất cả các nhân vật. See your ascii table.

ctype.h cũng cung cấp các chức năng để thực hiện việc này cho bạn.

+0

Điều này là đúng, nhưng không phải vì ASCII được đảm bảo, nhưng vì sự tiếp giáp của các chữ số: http://stackoverflow.com/a/35936519/ 895245 –

1

Bạn thường có thể kiểm tra chữ hoặc số sử dụng điều kiện đơn giản

if((ch>='a' && ch<='z') || (ch>='A' && ch<='Z)) 
{ 
    /*This is an alphabet*/ 
} 

Đối với chữ số bạn có thể sử dụng

if(ch>='0' && ch<='9') 
{ 
    /*It is a digit*/ 
} 

Nhưng kể từ khi nhân vật trong C được xử lý cục bộ như ASCII values bạn cũng có thể sử dụng giá trị ASCII để kiểm tra tương tự.

How to check if a character is number or letter

1

chuẩn C99 trên c >= '0' && c <= '9'

c >= '0' && c <= '9' (nêu in another answer) công trình vì C99 N1256 standard draft 5.2.1 "tập kí tự" nói:

Trong cả hai nguồn và thực hiện nhân vật cơ bản bộ, giá trị của mỗi ký tự sau 0 trong danh sách chữ số thập phân ở trên phải lớn hơn một giá trị của trước đó.

ASCII không được bảo đảm.

Các vấn đề liên quan