स्ट्रिंग तुलना
C में स्ट्रिंग्स की तुलना के लिए strcmp() फ़ंक्शन का उपयोग किया जाता है (<string.h> में परिभाषित)।
strcmp() व्यवहार
| रिटर्न मान | अर्थ |
|---|---|
| 0 | स्ट्रिंग्स समान हैं |
| < 0 | str1, str2 से लेक्सिकोग्राफिकली छोटी है |
| > 0 | str1, str2 से लेक्सिकोग्राफिकली बड़ी है |
केस सेंसिटिविटी
strcmp()केस-सेंसिटिव है- "Hello" ≠ "hello"
- केस-असंवेदनशील के लिए:
strcasecmp()(POSIX) या_stricmp()(विंडोज़)
C प्रोग्राम
#include <stdio.h>
#include <string.h>
int main() {
char str1[100], str2[100];
printf("पहली स्ट्रिंग दर्ज करें: ");
fgets(str1, sizeof(str1), stdin);
str1[strcspn(str1, "\n")] = 0; // न्यूलाइन हटाएं
printf("दूसरी स्ट्रिंग दर्ज करें: ");
fgets(str2, sizeof(str2), stdin);
str2[strcspn(str2, "\n")] = 0;
if (strcmp(str1, str2) == 0)
printf("हाँ, दोनों स्ट्रिंग्स समान हैं\n");
else
printf("नहीं, स्ट्रिंग्स समान नहीं हैं\n");
// अतिरिक्त जानकारी
int cmp = strcmp(str1, str2);
if (cmp < 0)
printf("'%s' '%s' से पहले आता है\n", str1, str2);
else if (cmp > 0)
printf("'%s' '%s' के बाद आता है\n", str1, str2);
return 0;
}
नमूना आउटपुट
पहली स्ट्रिंग दर्ज करें: tutorials point दूसरी स्ट्रिंग दर्ज करें: tutorials point हाँ, दोनों स्ट्रिंग्स समान हैं
पहली स्ट्रिंग दर्ज करें: world दूसरी स्ट्रिंग दर्ज करें: World नहीं, स्ट्रिंग्स समान नहीं हैं 'World' 'world' से पहले आता है
मैन्युअल तुलना (strcmp के बिना)
bool strings_equal(char *s1, char *s2) {
while (*s1 && *s2) {
if (*s1 != *s2) return false;
s1++; s2++;
}
return *s1 == *s2; // दोनों नल टर्मिनेटर पर पहुंचे
}
// केस-असंवेदनशील
bool strings_equal_ci(char *s1, char *s2) {
while (*s1 && *s2) {
if (tolower(*s1) != tolower(*s2)) return false;
s1++; s2++;
}
return *s1 == *s2;
}
सामान्य गलतियां
// गलत! पते की तुलना करता है, सामग्री की नहीं if (str1 == str2) // गलत // गलत! = असाइनमेंट है, तुलना नहीं if (strcmp(str1, str2) = 0) // गलत // सही if (strcmp(str1, str2) == 0) // सही
सुरक्षित स्ट्रिंग तुलना
// लंबाई-जांच के साथ (बफर ओवरफ्लो रोकथाम)
bool safe_strcmp(char *s1, char *s2, size_t maxlen) {
for (size_t i = 0; i < maxlen; i++) {
if (s1[i] != s2[i]) return false;
if (s1[i] == '\0') return true;
}
return true; // maxlen तक समान
}