समस्या
दिए गए स्ट्रिंग में अक्षर (alphabets), अंक (digits) और विशेष वर्ण (special characters) की संख्या गिनना।
एल्गोरिदम
- स्ट्रिंग को अंत तक (
'\0') पार करें - प्रत्येक वर्ण के लिए जांचें:
'a'-'z'या'A'-'Z'→ अक्षर काउंटर बढ़ाएं'0'-'9'→ अंक काउंटर बढ़ाएं- अन्यथा → विशेष वर्ण काउंटर बढ़ाएं
ctype.h फंक्शन्स का उपयोग (अनुशंसित)
मैन्युअल रेंज जांच के बजाय स्टैंडर्ड लाइब्रेरी फंक्शन्स अधिक पोर्टेबल और पठनीय हैं:
isalpha(ch)- अक्षर है?isdigit(ch)- अंक है?isspace(ch)- व्हाइटस्पेस है?ispunct(ch)- विराम चिह्न है?isalnum(ch)- अक्षर या अंक है?
पूर्ण C प्रोग्राम
#include <stdio.h>
#include <ctype.h>
int main() {
char str[1000];
int alphabets = 0, digits = 0, special = 0, spaces = 0;
int i;
printf("स्ट्रिंग दर्ज करें: ");
fgets(str, sizeof(str), stdin); // gets() असुरक्षित है, fgets() उपयोग करें
// नई लाइन हटाएं यदि मौजूद
for (i = 0; str[i]; i++) {
if (str[i] == '\n') { str[i] = '\0'; break; }
}
for (i = 0; str[i] != '\0'; i++) {
unsigned char ch = str[i]; // ctype.h के लिए unsigned char कास्ट
if (isalpha(ch))
alphabets++;
else if (isdigit(ch))
digits++;
else if (isspace(ch))
spaces++;
else
special++;
}
printf("\nपरिणाम:\n");
printf("अक्षर: %d\n", alphabets);
printf("अंक: %d\n", digits);
printf("स्पेस: %d\n", spaces);
printf("विशेष वर्ण: %d\n", special);
printf("कुल: %d\n", alphabets + digits + spaces + special);
return 0;
}
आउटपुट उदाहरण
स्ट्रिंग दर्ज करें: Hello World 123! @# परिणाम: अक्षर: 10 अंक: 3 स्पेस: 2 विशेष वर्ण: 3 कुल: 18
मैन्युअल रेंज जांच संस्करण (बिना ctype.h)
for (i = 0; str[i]; i++) {
char ch = str[i];
if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
alphabets++;
else if (ch >= '0' && ch <= '9')
digits++;
else if (ch == ' ' || ch == '\t' || ch == '\n')
spaces++;
else
special++;
}
महत्वपूर्ण नोट्स
⚠ ctype.h फंक्शन्स के लिए unsigned char कास्ट आवश्यक
ctype.h फंक्शन्स का व्यवहार EOF (आमतौर पर -1) और नकारात्मक char मानों के लिए अनिर्धारित है। हमेशा कास्ट करें:
if (isalpha((unsigned char)ch)) ...
विस्तार: यूनिकोड/UTF-8 के लिए
उपरोक्त कोड केवल ASCII/बाइट-स्तरीय काम करता है। UTF-8 में बहु-बाइट वर्णों के लिए libicu या utf8proc लाइब्रेरी उपयोग करें।
समय जटिलता
- समय: O(n) - n स्ट्रिंग लंबाई
- स्थान: O(1) - केवल काउंटर