2010-07-10 7 views
23

मान लीजिए कि मेरे पास स्ट्रिंग "qwerty" है और मैं इसमें e वर्ण की अनुक्रमणिका स्थिति खोजना चाहता हूं। (इस मामले में सूचकांक 2 होगा)सी में स्ट्रिंग के भीतर किसी वर्ण की अनुक्रमणिका कैसे प्राप्त करूं?

मैं इसे सी में कैसे कर सकता हूं?

मुझे strchr फ़ंक्शन मिला लेकिन यह एक चरित्र के लिए एक सूचक देता है, न कि सूचकांक।

+0

संभव डुप्लिकेट सी] (http://stackoverflow.com/questions/4824/string-indexof-function-in-c) –

उत्तर

47

बस क्या strchr रिटर्न से स्ट्रिंग पता घटाना:

char *string = "qwerty"; 
char *e; 
int index; 

e = strchr(string, 'e'); 
index = (int)(e - string); 
+0

डाउन-वोटर: क्या कोड में कुछ गड़बड़ है? – wj32

+0

यह "सही" है लेकिन सैद्धांतिक रूप से डरावना है कि एक स्ट्रिंग की लंबाई को रोकने के मानक में कुछ भी नहीं है जो एक सादे 'int' की क्षमता से काफी अधिक है। यदि आप सी 99 पर निर्भर कर सकते हैं, तो इसके लिए uintptr_t (stdint.h में परिभाषित) का उपयोग करें। इसे उस कलाकार की आवश्यकता को भी खत्म करना चाहिए। –

+4

सूचक अंतर का परिणाम ptrdiff_t है। – Nyan

3
void myFunc(char* str, char c) 
{ 
    char* ptr; 
    int index; 

    ptr = strchr(str, c); 
    if (ptr == NULL) 
    { 
     printf("Character not found\n"); 
     return; 
    } 

    index = ptr - str; 

    printf("The index is %d\n", index); 
    ASSERT(str[index] == c); // Verify that the character at index is the one we want. 
} 

इस कोड को वर्तमान में untested है, लेकिन यह उचित अवधारणा को दर्शाता है।

4

आप strcspn(string, "e") का भी उपयोग कर सकते हैं लेकिन यह बहुत धीमा हो सकता है क्योंकि यह कई संभावित वर्णों को खोजने में सक्षम है। strchr का उपयोग करना और सूचक को घटाना सबसे अच्छा तरीका है।

0

के बारे में क्या:

char *string = "qwerty"; 
char *e = string; 
int idx = 0; 
while (*e++ != 'e') idx++; 

नकल मूल स्ट्रिंग संरक्षित करने के लिए ई करने के लिए, मुझे लगता है अगर आप परवाह नहीं है तुम बस पर काम कर सकता है * स्ट्रिंग

में [String.indexOf समारोह के
संबंधित मुद्दे

 संबंधित मुद्दे