String Without string.h
String functions हाथ से क्यों लिखें?
C आपको <string.h> में तैयार string tools देता है — strlen, strcpy, strrev और भी। पर अपने खुद के versions लिखना strings को सच में समझने का सबसे अच्छा तरीका है, और यह बहुत आम interview अभ्यास है।
नीचे सब कुछ सिर्फ़ loops और arrays इस्तेमाल करता है — कोई string.h नहीं। एक बार यह समझ लें, तो library functions फिर कभी जादू नहीं लगेंगे।
राज़: null terminator
हर C string गुप्त रूप से एक विशेष character '\0' (null terminator) से खत्म होती है। शब्द "Hi" असल में तीन characters में रखा जाता है: 'H', 'i', '\0'। वही आख़िरी '\0' हर function को बताता है कि string कहाँ खत्म होती है।
लगभग हर हाथ से लिखा string function बस यही है — "characters में तब तक चलो जब तक '\0' न मिले।"
strlen के बिना length
#include <stdio.h>
int main() {
char str[] = "CodingEasily";
int len = 0;
while (str[len] != '\0') // terminator par ruko
len++;
printf("Length = %d\n", len);
return 0;
}Length = 12
Loop characters गिनता है जब तक '\0' न मिले — वही गिनती length है।
strcpy के बिना copy
#include <stdio.h>
int main() {
char src[] = "Hello";
char dest[20];
int i = 0;
while (src[i] != '\0') { dest[i] = src[i]; i++; }
dest[i] = '\0'; // terminator bhi copy karein!
printf("Copied: %s\n", dest);
return 0;
}Copied: Hello
Loop के बाद आपको खुद dest[i] = '\0'; जोड़ना होगा, वरना dest valid string नहीं है और उसे print करने पर garbage छपता है।
String reverse करना
Length निकालें, फिर सिरों को अंदर की ओर swap करें जब तक वे मिल न जाएँ।
#include <stdio.h>
int main() {
char str[] = "coding";
int len = 0;
while (str[len] != '\0') len++;
for (int i = 0, j = len - 1; i < j; i++, j--) {
char t = str[i]; str[i] = str[j]; str[j] = t; // swap
}
printf("Reversed: %s\n", str);
return 0;
}Reversed: gnidoc
दो indices i और j एक-दूसरे की ओर बढ़ते हैं, चलते-चलते swap करते हुए। जब वे मिलते हैं, string पूरी तरह पलट जाती है।
दो strings की तुलना
int i = 0;
while (a[i] != '\0' && b[i] != '\0') {
if (a[i] != b[i]) break; // pehla antar
i++;
}
if (a[i] == b[i]) printf("Equal\n");
else printf("Not equal\n");दोनों strings साथ चलाएँ; जिस पल दो characters अलग हों, वे बराबर नहीं। अगर आप दोनों के अंत पर एक साथ पहुँचें, तो वे मेल खाती हैं।
आम गलतियाँ
- Copy के बाद
'\0'जोड़ना भूलना, जिससे invalid string रह जाती है। - Destination array को copy और
'\0'रखने के लिए बहुत छोटा बनाना। <=length के साथ loop करके एक character आगे तक पढ़ना।- Reverse में
i <= jइस्तेमाल करके बीच के character को बेवजह खुद से swap करना।
अपना concat लिखें जो दो strings जोड़े: पहली copy करें, फिर उसके ठीक बाद दूसरी copy करते रहें, और '\0' से खत्म करें। "Coding" और "Easily" से test करें।
सारांश
- हर C string null terminator
'\0'से खत्म होती है। - Length:
'\0'तक characters गिनें। - Copy: हर character रखें, फिर खुद
'\0'जोड़ें। - Reverse: दोनों सिरों से अंदर की ओर characters swap करें।
- Compare: दोनों strings चलाएँ जब तक अंतर न हो या दोनों खत्म हों।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
C में strlen के बिना string की length कैसे निकालें?
'\0' न मिले, हर कदम counter बढ़ाते हुए। Loop रुकने पर counter length के बराबर होता है। strlen भीतर यही करता है।C string में null terminator क्या है?
'\0' से खत्म होती है, जिसे null terminator कहते हैं। यह दर्शाता है कि string कहाँ रुकती है। सभी string functions — चाहे built-in हों या हाथ से लिखे — text का अंत जानने के लिए इसी पर निर्भर करते हैं।C में strrev के बिना string कैसे reverse करें?
strcpy के बिना string कैसे copy करें?
String functions खुद लिखना क्यों सीखें?
string.h functions ही इस्तेमाल करेंगे।