C Language
- चरित्र वर्गीकरण और रूपांतरण
खोज…
एक धारा से पढ़े हुए पात्रों को वर्गीकृत करना
#include <ctype.h>
#include <stdio.h>
typedef struct {
size_t space;
size_t alnum;
size_t punct;
} chartypes;
chartypes classify(FILE *f) {
chartypes types = { 0, 0, 0 };
int ch;
while ((ch = fgetc(f)) != EOF) {
types.space += !!isspace(ch);
types.alnum += !!isalnum(ch);
types.punct += !!ispunct(ch);
}
return types;
}
classify
फ़ंक्शन एक धारा से वर्ण पढ़ता है और रिक्त स्थान, अल्फ़ान्यूमेरिक और विराम चिह्नों की संख्या को गिनता है। यह कई नुकसान से बचा जाता है।
- एक धारा से एक चरित्र को पढ़ते समय, परिणाम को एक
int
रूप में सहेजा जाता है, क्योंकि अन्यथाEOF
(अंत-से-फ़ाइल मार्कर) पढ़ने के बीच एक अस्पष्टता होगी और एक चरित्र जिसमें समान पैटर्न होता है। - चरित्र वर्गीकरण फ़ंक्शंस (जैसे
isspace
) उनके तर्क को एकunsigned char
याEOF
मैक्रो के मूल्य के रूप में प्रतिनिधित्व करने योग्य होने की उम्मीद करते हैं । चूँकि यह ठीक वैसा ही है जैसा किfgetc
देता है, यहाँ रूपांतरण की कोई आवश्यकता नहीं है। - वर्ण वर्गीकरण फ़ंक्शंस का रिटर्न वैल्यू केवल शून्य (अर्थ
false
) और नॉनज़रो (true
अर्थ) के बीच अंतर करता है। घटनाओं की संख्या की गणना के लिए, इस मान को 1 या 0 में परिवर्तित करने की आवश्यकता है, जो कि दोहरे निषेध द्वारा किया जाता है,!!
।
एक तार से वर्णों को वर्गीकृत करना
#include <ctype.h>
#include <stddef.h>
typedef struct {
size_t space;
size_t alnum;
size_t punct;
} chartypes;
chartypes classify(const char *s) {
chartypes types = { 0, 0, 0 };
const char *p;
for (p= s; p != '\0'; p++) {
types.space += !!isspace((unsigned char)*p);
types.alnum += !!isalnum((unsigned char)*p);
types.punct += !!ispunct((unsigned char)*p);
}
return types;
}
classify
फ़ंक्शन एक स्ट्रिंग से सभी वर्णों की जांच करता है और रिक्त स्थान, अल्फ़ान्यूमेरिक और विराम चिह्नों की संख्या की गणना करता है। यह कई नुकसान से बचा जाता है।
- चरित्र वर्गीकरण फ़ंक्शंस (जैसे
isspace
) उनके तर्क को एकunsigned char
याEOF
मैक्रो के मूल्य के रूप में प्रतिनिधित्व करने योग्य होने की उम्मीद करते हैं । - अभिव्यक्ति
*p
प्रकारchar
और इसलिए इसे उपरोक्त शब्दों से मिलान करने के लिए परिवर्तित किया जाना चाहिए। -
char
प्रकार कोsigned char
याunsigned char
बराबर माना जाता है। - जब
char
unsigned char
बराबर होता है, तो कोई समस्या नहीं है, क्योंकिchar
प्रकार के हर संभव मूल्य कोunsigned char
रूप में दर्शाया जा सकता है। - जब
char
परsigned char
बराबर होता है, तो उसे वर्ण वर्गीकरण कार्यों में पारित होने से पहलेunsigned char
परिवर्तित किया जाना चाहिए। और यद्यपि इस रूपांतरण के कारण चरित्र का मूल्य बदल सकता है, यह वही है जो इन कार्यों की अपेक्षा करता है। - वर्ण वर्गीकरण फ़ंक्शंस का रिटर्न वैल्यू केवल शून्य (अर्थ
false
) और नॉनज़रो (true
अर्थ) के बीच अंतर करता है। घटनाओं की संख्या की गणना के लिए, इस मान को 1 या 0 में परिवर्तित करने की आवश्यकता है, जो कि दोहरे निषेध द्वारा किया जाता है,!!
।
परिचय
शीर्ष लेख ctype.h
मानक C लाइब्रेरी का एक हिस्सा है। यह वर्णों को वर्गीकृत और परिवर्तित करने के लिए कार्य प्रदान करता है।
ये सभी कार्य एक पैरामीटर लेते हैं, एक ऐसा int
जो किसी ईओएफ के रूप में ईओएफ या प्रतिनिधित्व करने योग्य होना चाहिए।
वर्गीकरण कार्यों के नाम। है ’के साथ उपसर्ग हैं। प्रत्येक पूर्णांक गैर-शून्य मान (TRUE) लौटाता है यदि इसमें दिया गया वर्ण संबंधित स्थिति को संतुष्ट करता है। यदि हालत संतुष्ट नहीं है, तो फ़ंक्शन शून्य मान (FALSE) देता है।
डिफ़ॉल्ट सी लोकेल मानकर ये वर्गीकरण कार्य दिखाए गए हैं:
int a;
int c = 'A';
a = isalpha(c); /* Checks if c is alphabetic (A-Z, a-z), returns non-zero here. */
a = isalnum(c); /* Checks if c is alphanumeric (A-Z, a-z, 0-9), returns non-zero here. */
a = iscntrl(c); /* Checks is c is a control character (0x00-0x1F, 0x7F), returns zero here. */
a = isdigit(c); /* Checks if c is a digit (0-9), returns zero here. */
a = isgraph(c); /* Checks if c has a graphical representation (any printing character except space), returns non-zero here. */
a = islower(c); /* Checks if c is a lower-case letter (a-z), returns zero here. */
a = isprint(c); /* Checks if c is any printable character (including space), returns non-zero here. */
a = isupper(c); /* Checks if c is a upper-case letter (a-z), returns zero here. */
a = ispunct(c); /* Checks if c is a punctuation character, returns zero here. */
a = isspace(c); /* Checks if c is a white-space character, returns zero here. */
a = isupper(c); /* Checks if c is an upper-case letter (A-Z), returns non-zero here. */
a = isxdigit(c); /* Checks if c is a hexadecimal digit (A-F, a-f, 0-9), returns non-zero here. */
a = isblank(c); /* Checks if c is a blank character (space or tab), returns non-zero here. */
दो रूपांतरण कार्य हैं। इनका नाम उपसर्ग 'से' तक रखा गया है। ये कार्य ऊपर दिए गए लोगों के समान ही तर्क देते हैं। हालाँकि वापसी मूल्य एक साधारण शून्य या गैर-शून्य नहीं है लेकिन पारित तर्क कुछ तरीके से बदल गया है।
ये रूपांतरण फ़ंक्शन डिफ़ॉल्ट सी लोकेल को मानते हुए दिखाए गए अनुसार काम करते हैं:
int a;
int c = 'A';
/* Converts c to a lower-case letter (a-z).
* If conversion is not possible the unchanged value is returned.
* Returns 'a' here.
*/
a = tolower(c);
/* Converts c to an upper-case letter (A-Z).
* If conversion is not possible the unchanged value is returned.
* Returns 'A' here.
*/
a = toupper(c);
नीचे दी गई जानकारी cplusplus.com मैपिंग से उद्धृत की गई है कि मूल 127-वर्ण ASCII सेट को प्रत्येक वर्गीकृत प्रकार के कार्यों द्वारा कैसे माना जाता है (एक • इंगित करता है कि फ़ंक्शन उस चरित्र के लिए गैर-शून्य देता है)
ASCII मान | पात्र | iscntrl | खाली है | isspace | isupper | कम है | isalpha | isdigit | isxdigit | isalnum | ispunct | isgraph | isprint |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x00 .. 0x08 | एनयूएल, (अन्य नियंत्रण कोड) | • | |||||||||||
0x09 | टैब ('\ t') | • | • | • | |||||||||
0x0A .. 0x0D | (व्हाइट-स्पेस कंट्रोल कोड: '\ f', '\ v', '\ n', '\ r') | • | • | ||||||||||
0x0E .. 0x1F | (अन्य नियंत्रण कोड) | • | |||||||||||
0x20 | अंतरिक्ष ('') | • | • | • | |||||||||
0x21 .. 0x2F | ! "# $% & '() * +, -। / | • | • | • | |||||||||
0x30 .. 0x39 | 0123456789 | • | • | • | • | • | |||||||
0x3a .. 0x40 | :;? <=> @ | • | • | • | |||||||||
0x41 .. 0x46 | ABCDEF | • | • | • | • | • | • | ||||||
0x47 .. 0x5A | GHIJKLMNOPQRSTUVWXYZ | • | • | • | • | • | |||||||
0x5B .. 0x60 | [] ^ _ ` | • | • | • | |||||||||
0x61 .. 0x66 | abcdef | • | • | • | • | • | • | ||||||
0x67 .. 0x7A | ghijklmnopqrstuvwxyz | • | • | • | • | • | |||||||
0x7B .. 0x7E | {} ~ बार | • | • | • | |||||||||
0x7F | (डेल) | • |