सी में स्ट्रिंग.इंडेक्स फंक्शन

क्या कोई सी लाइब्रेरी फ़ंक्शन है जो स्ट्रिंग में किसी वर्ण की अनुक्रमणिका को वापस कर देगा?

अब तक, मैंने जो कुछ पाया है वह स्ट्रस्ट्र जैसे कार्य हैं जो पाए गए char * को वापस कर देंगे, न कि मूल स्ट्रिंग में इसका स्थान।

0
ro fr bn

7 उत्तर

If you are not totally tied to pure C and can use string.h there is strchr() See here

0
जोड़ा
मुझे यकीन नहीं है कि "शुद्ध सी" से आपका क्या मतलब है लेकिन strchr() और string.h 20 वर्षों तक मानक सी का हिस्सा रहा है।
जोड़ा लेखक Robert Gamble, स्रोत

संपादित करें: strchr केवल एक char के लिए बेहतर है। सूचक aritmetics कहते हैं "हेलो!":

char *pos = strchr (myString, '#');
int pos = pos ? pos - myString : -1;

Important: strchr() returns NULL if no string is found

0
जोड़ा
क्या आप चर नाम से बाहर हो गए? ;-)
जोड़ा लेखक Isak Savo, स्रोत
आपकी टिप्पणी इतनी अपवित्र क्यों हुई है?
जोड़ा लेखक theonlygusti, स्रोत
@theonlygusti मैंने सोचा कि यह हाल ही में था (मैंने दिनांक 15 नवंबर 16 को पढ़ा था), और खराब मजाक को समझाने के लिए पुरानी बातचीत को पुनर्जीवित करने में कोई बात नहीं है। अगर मुझे लगता है, तो मैं कहूंगा कि एक मॉड ने मेरे "अप्रचलित" टिप्पणी ध्वज को देखा और टिप्पणी को हटाने के लिए इसे एक क्यू के रूप में लिया, क्योंकि यह ... अप्रचलित है। या कम से कम व्यर्थ।
जोड़ा लेखक Nic Hartley, स्रोत

आप जो चाहते हैं उसे पूरा करने के लिए आप स्ट्रस्ट्र का उपयोग कर सकते हैं। उदाहरण:

char *a = "Hello World!";
char *b = strstr(a, "World");

int position = b - a;

printf("the offset is %i\n", position);

यह परिणाम पैदा करता है:

the offset is 6
0
जोड़ा
यूबी अगर कोई मैच नहीं है (पॉइंटर्स का घटाव एक ही वस्तु के भीतर नहीं है)।
जोड़ा लेखक R.., स्रोत

खुद लिखिए :)

Code from a BSD licensed string processing library for C, called zString

https://github.com/fnoyanisi/zString

int zstring_search_chr(char *token,char s){
    if (!token || s=='\0')
        return 0;

    for (;*token; token++)
        if (*token == s)
            return 1;

    return 0;
}
0
जोड़ा

strstr returns a pointer to the found character, so you could use pointer arithmetic: (Note: this code not tested for its ability to compile, it's one step away from pseudocode.)

char * source = "test string";         /* assume source address is */
                                       /* 0x10 for example */
char * found = strstr( source, "in" ); /* should return 0x18 */
if (found != NULL)                     /* strstr returns NULL if item not found */
{
  int index = found - source;          /* index is 8 */
                                       /* source[8] gets you "i" */
}
0
जोड़ा
अपरिभाषित व्यवहार अगर चरित्र नहीं मिला है। यदि आपको strchr पर्याप्त होगा तो आपको strstr (टाइपो के साथ या बिना) का उपयोग नहीं करना चाहिए।
जोड़ा लेखक R.., स्रोत
दरअसल, लेकिन ओपी ने एक चरित्र को एक सबस्ट्रिंग नहीं पूछा। बेशक यदि आप मल्टीबाइट वर्णों को शामिल करने के लिए व्यापक रूप से चरित्र की व्याख्या करते हैं, तो strstr उपयोग करने के लिए सही कार्य है।
जोड़ा लेखक R.., स्रोत
@ आर .. - मैंने टाइपो को ठीक किया और छद्म कोड में जांच त्रुटि जोड़ा। साथ ही, strchr बहु-वर्ण अनुक्रमों को खोजने के लिए काम नहीं करता है, है ना?
जोड़ा लेखक Bill, स्रोत
@ आर .. - चूंकि ओपी टेक्स्ट के रूप में एक चरित्र के बारे में बात कर रहा था, जैसा कि char भंडारण नाम में नहीं था, मैंने एक समाधान दिया जिसकी एक चरित्र के लिए काम करने की उम्मीद है? आप ऑब्जेक्ट करते हैं?
जोड़ा लेखक Bill, स्रोत

मुझे लगता है कि

size_t strcspn (const char * str1, const char * str2);

क्या आप चाहते हैं यहां यहां से खींचा गया एक उदाहरण दिया गया है:

/* strcspn example */
#include 
#include 

int main ()
{
  char str[] = "fcba73";
  char keys[] = "1234567890";
  int i;
  i = strcspn (str,keys);
  printf ("The first number in str is at position %d.\n",i+1);
  return 0;
}
0
जोड़ा
उपर्युक्त टिप्पणी बहुत महत्वपूर्ण है - उदाहरण के रूप में इसे करने से indexOf() की नकल नहीं होती है, इसलिए मूल उत्तर बहुत गलत है।
जोड़ा लेखक GreenieMeanie, स्रोत
strcspn String.IndexOfAny() की तरह है - keys array में किसी भी वर्ण की खोज करें। लेकिन हाँ, यह चाल चल जाएगा
जोड़ा लेखक Isak Savo, स्रोत
यह वही है जो आप खोज रहे हैं: stackoverflow.com/a/1479401/3395760
जोड़ा लेखक Ale Muzzi, स्रोत

तुम लिख सकते हो

s="bvbrburbhlkvp";
int index=strstr(&s,"h")-&s;

दिए गए वस्त्र में 'h' की अनुक्रमणिका ढूंढने के लिए।

0
जोड़ा
स्ट्रिंग नहीं मिली अगर strstr NULL लौटा सकता है।
जोड़ा लेखक Ivan, स्रोत