C:
एक पैटर्न से मेल खाते वर्णों को हटाना
कैसे करें:
C में एक पैटर्न के आधार पर स्ट्रिंग से अक्षरों को प्रत्यक्ष रूप से डिलीट करने के लिए कोई बिल्ट-इन फंक्शन नहीं आता है, कुछ उच्च स्तरीय भाषाओं के विपरीत। हालांकि, आप स्ट्रिंग पर मैन्युअल रूप से इटरेटिंग करके और एक नई स्ट्रिंग का निर्माण करके जो अवांछित अक्षरों को छोड़ देती है, आसानी से यह कार्य पूरा कर सकते हैं। उदाहरण के लिए, मान लीजिए आप एक स्ट्रिंग से सभी अंकों को हटाना चाहते हैं। आप इसे निम्नलिखित तरीके से कर सकते हैं:
#include <stdio.h>
#include <ctype.h>
void remove_digits(char *str) {
char *src = str, *dst = str;
while (*src) {
if (!isdigit((unsigned char)*src)) {
*dst++ = *src;
}
src++;
}
*dst = '\0';
}
int main() {
char str[] = "C Programming 101: The Basics!";
remove_digits(str);
printf("Result: %s\n", str);
return 0;
}
नमूना आउटपुट:
Result: C Programming : The Basics!
यह उदाहरण ctype.h
से isdigit
का उपयोग करके अंकों की पहचान करता है, गैर-अंक अक्षरों को स्ट्रिंग की शुरुआत में शिफ्ट करता है और सभी अक्षरों के मूल्यांकन के बाद स्ट्रिंग को समाप्त करता है।
गहराई से
प्रस्तुत समाधान उन अवांछित अक्षरों को प्रभावी रूप से फिल्टर करने के लिए एक ही ऐरे के भीतर एक दो-पॉइंटर दृष्टिकोण का उपयोग करता है, एक तकनीक जो C के हाथों-पर मेमोरी मैनेजमेंट दर्शन का प्रतीक है। यह विधि कारगर है क्योंकि यह जगह में ही काम करती है, अतिरिक्त मेमोरी आबंटन की आवश्यकता से बचती है और इस प्रकार ओवरहेड को कम से कम करती है।
ऐतिहासिक रूप से, C में उच्च-स्तरीय स्ट्रिंग मैनिप्यूलेशन फंक्शन्स की अनुपस्थिति ने प्रोग्रामरों को स्मृति स्तर पर स्ट्रिंग हैंडलिंग की गहरी समझ विकसित करने पर मजबूर किया है, ऊपर दिए गए जैसे नवीन दृष्टिकोणों की ओर ले जाता है। जबकि इससे अधिक नियंत्रण और कार्यकुशलता का लाभ होता है, इसके साथ बफर ओवरफ्लो और एक-से-अधिक गलतियों जैसी गलतियों का उच्च जोखिम भी आता है।
आधुनिक विकास संदर्भों में, विशेष रूप से सुरक्षा और सुरक्षा पर जोर देने वाले, ऐसे कम-स्तरीय कार्यों को दूर करने वाली भाषाओं को स्ट्रिंग मैनिप्यूलेशन कार्यों के लिए प्राथमिकता दी जा सकती है। फिर भी, इन C तकनीकों को समझना और उपयोग करना उन परिदृश्यों के लिए अमूल्य रहता है जो महीन दक्षता अनुकूलन या उन वातावरणों की मांग करते हैं जहां C की न्यूनतावाद और गति सर्वोपरि हैं।