Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C भाषा में स्ट्रिंग में वर्ण, अंक और विशेष वर्ण गिनना


समस्या

दिए गए स्ट्रिंग में अक्षर (alphabets), अंक (digits) और विशेष वर्ण (special characters) की संख्या गिनना।

एल्गोरिदम

  1. स्ट्रिंग को अंत तक ('\0') पार करें
  2. प्रत्येक वर्ण के लिए जांचें:
    • '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) - केवल काउंटर
  1. C में स्ट्रिंग को नंबर और नंबर को स्ट्रिंग में बदलना C में स्ट्रिंग को नंबर और नंबर को स्ट्रिंग में बदलना

    दो रूपांतरण फंक्शन्स sscanf(): स्ट्रिंग को नंबर में बदलता है। sprintf(): नंबर को स्ट्रिंग में बदलता है। स्ट्रिंग टू नंबर: sscanf() सिंटैक्स: sscanf(string_name, control_string, &var_list); उदाहरण: तारीख पार्स करना #include <stdio.h> int main() { char a[20] = 02 01 2010; int day, m

  1. - NumPy का उपयोग करके दिए गए मैट्रिक्स में पंक्तियों और स्तंभों की संख्या ढूंढना

    हम पहले एक numpy मैट्रिक्स बनाएंगे और फिर उस मैट्रिक्स में पंक्तियों और स्तंभों की संख्या ढूंढेंगे। एल्गोरिदम चरण 1: रैंडम संख्याओं का numpy मैट्रिक्स बनाएं। चरण 2: numpy.shape फ़ंक्शन का उपयोग करके मैट्रिक्स की पंक्तियों और स्तंभों को ढूंढें। चरण 3: पंक्तियों और स्तंभों की संख्या प्रिंट करें। उदाह

  1. - Python - संख्या के अंकों से मैप्ड कैरेक्टर्स से बने सभी स्ट्रिंग्स ढूंढना

    मान लीजिए हमारे पास निम्नलिखित कैरेक्टर मैपिंग है, जहां 1 से 9 तक प्रत्येक अंक कुछ कैरेक्टर्स से मैप होता है। [Y, Z] यदि हमारे पास एक संख्या है, तो हमें उसके अंकों को दी गई मैपिंग लिस्ट में संबंधित कैरेक्टर्स से बदलना है और सभी जनरेटेड स्ट्रिंग्स दिखानी हैं। हमें संख्या में एक अंक के हर ऑकरेंस के ल