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

C भाषा में कस्टम atoi() फंक्शन बनाना


atoi() फंक्शन

स्टैंडर्ड लाइब्रेरी फंक्शन atoi() (stdlib.h) स्ट्रिंग को पूर्णांक में बदलता है।

  • केवल अग्रणी संख्यात्मक भाग बदलता है
  • गैर-संख्यात्मक वर्ण मिलने पर रुक जाता है
  • अमान्य इनपुट पर 0 लौटाता है (कोई त्रुटि संकेत नहीं)
  • ओवरफ्लो व्यवहार अनिर्धारित

कस्टम atoi() क्यों बनाएं?

  • त्रुटि पहचान (सफलता/विफलता जानना)
  • ओवरफ्लो जांच
  • सीखने/साक्षात्कार के लिए एल्गोरिदम समझ
  • अतिरिक्त सुविधाएँ: आधार (base) समर्थन, व्हाइटस्पेस हैंडलिंग

एल्गोरिदम

  1. अग्रणी व्हाइटस्पेस छोड़ें
  2. चिह्न (+/-) जांचें
  3. प्रत्येक अंक के लिए: result = result * 10 + (ch - '0')
  4. गैर-अंक मिलने पर रुकें
  5. चिह्न लागू करें
  6. ओवरफ्लो जांचें

स्टैंडर्ड atoi() उदाहरण

#include <stdio.h>
#include <stdlib.h>

int main() {
    char *s1 = "3567";
    char *s2 = "TutorialsPoint";
    char *s3 = "  -123abc";
    
    printf("'%s' → %d\n", s1, atoi(s1));   // 3567
    printf("'%s' → %d\n", s2, atoi(s2));   // 0
    printf("'%s' → %d\n", s3, atoi(s3));   // -123
    return 0;
}

कस्टम कार्यान्वयन (मजबूत संस्करण)

#include <stdio.h>
#include <limits.h>  // INT_MAX, INT_MIN
#include <ctype.h>   // isspace, isdigit

// रिटर्न: सफलता पर 0, विफलता पर -1
// परिणाम *out में संग्रहीत
int my_atoi(const char *str, int *out) {
    if (!str || !out) return -1;
    
    // 1. व्हाइटस्पेस छोड़ें
    while (isspace(*str)) str++;
    
    // 2. चिह्न
    int sign = 1;
    if (*str == '+') str++;
    else if (*str == '-') { sign = -1; str++; }
    
    // 3. अंक पढ़ें
    long long result = 0;  // ओवरफ्लो जांच के लिए बड़ा प्रकार
    int digits = 0;
    
    while (isdigit(*str)) {
        int digit = *str - '0';
        result = result * 10 + digit;
        digits++;
        str++;
        
        // 4. ओवरफ्लो जांच
        if (sign == 1 && result > INT_MAX) return -1;
        if (sign == -1 && -result < INT_MIN) return -1;
    }
    
    // 5. कोई अंक नहीं मिला
    if (digits == 0) return -1;
    
    *out = (int)(sign * result);
    return 0;
}

int main() {
    char *tests[] = {"3567", "TutorialsPoint", "  -123abc", "+42", "", "2147483647", "2147483648", NULL};
    
    for (int i = 0; tests[i]; i++) {
        int val;
        int ret = my_atoi(tests[i], &val);
        if (ret == 0)
            printf("'%s' → %d ✓\n", tests[i], val);
        else
            printf("'%s' → अमान्य/ओवरफ्लो ✗\n", tests[i]);
    }
    return 0;
}

आउटपुट

'3567' → 3567 ✓
'TutorialsPoint' → अमान्य/ओवरफ्लो ✗
'  -123abc' → -123 ✓
'+42' → 42 ✓
'' → अमान्य/ओवरफ्लो ✗
'2147483647' → 2147483647 ✓
'2147483648' → अमान्य/ओवरफ्लो ✗

उन्नत: strtol() उपयोग करें (अनुशंसित)

वास्तविक कोड में strtol() उपयोग करें - यह मजबूत, मानक और आधार (base 2-36) समर्थन करता है।


#include <stdlib.h>
#include <errno.h>

long val = strtol(str, &endptr, 10);
if (endptr == str) { /* कोई अंक नहीं */ }
if (errno == ERANGE) { /* ओवरफ्लो */ }

तुलना

फंक्शनरिटर्नत्रुटि जांचआधारसिफारिश
atoi()intनहीं10सरल उपयोग, कोई त्रुटि जांच नहीं
strtol()longहाँ (endptr, errno)2-36अनुशंसित
strtoll()long longहाँ2-3664-बिट के लिए
कस्टमint/boolडिजाइन अनुसारडिजाइन अनुसारसीखने/विशेष आवश्यकता
  1. - पायथन फंक्शन में आर्गुमेंट्स को वैल्यू द्वारा कैसे पास करें?

    दिए गए कोड के लिए आउटपुट निम्नानुसार है: b = 30 a = [10] इस मामले में, a वैल्यू द्वारा पास किया हुआ लगता है, क्योंकि फंक्शन कॉल के बाद भी मान अपरिवर्तित रहता है। इसलिए यह स्पष्ट है कि आर्गुमेंट्स पायथन फंक्शन में वैल्यू द्वारा पास किए गए हैं।

  1. ब्लूप्रिंट्स का उपयोग करके एक कस्टमाइज्ड एलेक्सा स्किल कैसे बनाएं ब्लूप्रिंट्स का उपयोग करके एक कस्टमाइज्ड एलेक्सा स्किल कैसे बनाएं

    स्मार्ट स्पीकर बाजार में बहुत सारे बढ़िया विकल्प हैं, लेकिन एलेक्सा के साथ अमेज़ॅन इको के पास एक उपयोगी विकल्प है जिसे अन्य अभी तक रोल आउट नहीं कर पाए हैं। जब आप एलेक्सा का उपयोग करते हैं, तो आपके पास बिल्कुल कोडिंग की आवश्यकता के बिना अपने स्वयं के कौशल बनाने की संभावना होती है! एलेक्सा ब्लूप्रिंट्

  1. - बैश फंक्शन में महारत: कोड को कुशलतापूर्वक बनाएं, कॉल करें और पुन: उपयोग करें

    बैश में फंक्शन बनाने और कॉल करने पर एक त्वरित गाइड। एक फंक्शन पुन: प्रयोज्य कोड का एक ब्लॉक होता है जिसका उपयोग किसी कार्य को करने के लिए किया जाता है। फंक्शन के साथ, हमें बेहतर मॉड्यूलरिटी और कोड पुन: उपयोग की उच्च डिग्री मिलती है। बैश कुछ बिल्ट-इन फंक्शन प्रदान करता है जैसे echo और read, लेकिन हम