2009-02-01 7 views
24

मैंने कभी-कभी strpbrk() का उपयोग सी में निम्न स्तर के स्ट्रिंग काम करते समय किया है, लेकिन मैं कभी भी यह पता लगाने में सक्षम नहीं हूं कि यह क्या है। मैंने हमेशा इसे अपने सिर में "हलचल पी छाल" के रूप में आंतरिक रूप से उच्चारण किया है, लेकिन यह कभी भी सही महसूस नहीं हुआ है।स्ट्रैब्रिक के लिए क्या खड़ा है?

इसमें कोई अन्य स्ट्रिंग फ़ंक्शंस के रूप में स्पष्ट रूप से एक व्युत्पत्ति नहीं है, उदा। (एक nstrएसपी ing) strchr (str ing ch एक आर Acter) या strspn

मैं अस्पष्ट रूप से कहीं पढ़ना याद करता हूं कि सभी मूल मानक लाइब्रेरी फ़ंक्शंस फ़ोरट्रान के साथ संगत रहने के लिए 7-वर्णों के नाम तक सीमित थे, या मूल सी मानक में, 7 वर्णों से अधिक पहचानकर्ताओं को उनके 7 के बराबर माना जाता था -character उपसर्ग या कुछ। क्या कोई इसे पुष्टि/अस्वीकार/स्पष्ट कर सकता है?

+0

समान प्रश्न उठाने के बारे में मुझे यहां जवाब मिला। आपका 'हलचल पी छाल' बल्कि रचनात्मक लगता है;) – artm

+1

मैंने हमेशा इसे "स्ट्रिप [बर्क] (https://en.wikipedia.org/wiki/Swedish_Chef)" के रूप में उच्चारण किया। मुझे किसी भी अन्य स्पष्टीकरण के रूप में ज्यादा समझ में आता है :) – Lundin

उत्तर

25

निम्नलिखित बातचीत से पता चलता है "स्ट्रिंग सूचक तोड़": http://www.cpptalk.net/what-strspn-and-strpbrk-stands-for--vt1253.html

दरअसल माइक्रोसॉफ्ट प्रलेखन मामले StrPBrk है और शब्दों के कि विभाजन की पुष्टि करने के लिए करते हैं जाएगा: http://msdn.microsoft.com/en-us/library/bb760010(VS.85).aspx

और अंत में यह यह पुष्टि करता है: http://www.gnu.org/software/libtool/manual/libc/Search-Functions.html

स्ट्रैब्रिक ("स्ट्रिंग पॉइंटर ब्रेक") फ़ंक्शन strcspn से संबंधित है, सिवाय इसके कि यह आर स्ट्रिंग में पहले वर्ण के लिए एक पॉइंटर बनाता है जो प्रारंभिक सबस्ट्रिंग की लंबाई के बजाय सेट स्टॉपसेट का सदस्य होता है। अगर स्टॉपसेट से ऐसा कोई चरित्र नहीं मिलता है तो यह एक शून्य सूचक देता है।

+7

ओउ - एक पॉइंटर तोड़ना दर्दनाक लगता है – bobobobo

3

मुझे vageuly याद है कि strpbrk स्ट्रिंग पॉइंटर ब्रेक के लिए खड़ा है, मुझे याद नहीं है कि मैंने इसे कहाँ देखा था।

12

From The GNU C Library documentation:

फंक्शन: चार * strpbrk (स्थिरांक चार * स्ट्रिंग, स्थिरांक चार * stopset)

strpbrk ("स्ट्रिंग सूचक तोड़") समारोह से संबंधित है strcspn को , को छोड़कर कि यह स्ट्रिंग में पहले वर्ण में एक सूचक लौटाता है जो प्रारंभिक सबस्ट्रिंग की लंबाई की बजाय सेट स्टॉपसेट के सदस्य है। यह स्टॉपसेट से कोई ऐसा वर्ण नहीं मिला है, तो एक शून्य सूचक देता है।

उदाहरण के लिए

,

strpbrk ("हैलो दुनिया", "\ t \ N,;।!?") => "दुनिया"

कार्य करने के लिए एक सूचक रिटर्न STOPSET (उर्फ BREAKSET) में पहला अक्षर। मैं मानसिक रूप से के रूप में "के लिए एसटीआर आईएनजी, लौट पी ointer ईए के लिए बीआरकश्मीर" इसे पढ़ा।

7

अपने अन्य प्रश्न के लिए के रूप में:

मैं थोड़ा कहीं पढ़ने कि मूल मानक पुस्तकालय कार्यों के सभी 7-चरित्र के नाम तक ही सीमित थे या तो क्योंकि में फोरट्रान के साथ संगत, या रहने के लिए याद करते हैं मूल सी मानक, पहचानकर्ता 7 वर्णों से अधिक उनके 7-वर्ण उपसर्ग या कुछ के बराबर माना जाता था। कोई भी इसे पुष्टि/अस्वीकार/स्पष्ट कर सकता है?

मूल एएनएसआई सी स्टैंडर्ड ने कहा कि यह कार्यान्वयन परिभाषित कैसे एक बाहरी प्रतीक के कई पात्रों महत्वपूर्ण होता था, लेकिन है कि यह कम से कम 6 अक्षर होना ही था (और कार्यान्वयन उनके लिए केस के प्रति असंवेदनशील होने के लिए अनुमति दी गई थी)। ऐसा इसलिए किया गया था क्योंकि जब सिस्टम अक्सर इस प्रकार की सीमा थी (चाहे वह फोरट्रान पुस्तकालयों, लिंकर सीमाओं या जो भी हो) से आया हो।

तो जब आप मानक पुस्तकालय में उससे अधिक बाहरी नाम देखेंगे, तो उनमें से कोई भी नाम 6 वर्ण अनुक्रम से शुरू नहीं होगा।

एफडब्ल्यूआईडब्ल्यू, सी 99 न्यूनतम 31 अक्षरों तक पहुंच गया। सी ++ मानक (1 99 8) का कहना है कि कार्यान्वयन को दस्तावेज करना चाहिए कि बाहरी नाम कितना महत्वपूर्ण है, और सुझाव देता है कि यह कम से कम 1024 वर्ण हो। मुझे पता है कि बोर्लैंड सी ++ 5.5 में 250 वर्णों की तरह कुछ सीमा थी जो विशेष रूप से टेम्पलेट का उपयोग करने में समस्याएं पैदा करती है।

+3

प्रश्न के दूसरे भाग का जवाब देने के लिए धन्यवाद, जिसे मैंने व्यक्तिगत रूप से दिलचस्प पाया। –

2

बेल लैब्स में 1 9 72 में स्नोबोल नामक एक प्रोग्रामिंग भाषा भी थी जो स्ट्रिंग मैनिपुलेशन के लिए थी। इसमें फंक्शन ब्रेक() और अवधि() था, जो अनिवार्य रूप से वही काम करता था। अधिकांश स्ट्रिंग फ़ंक्शंस को स्नोबोल में दिखाई देने वाली चीज़ के बाद मॉडलिंग किया जाता है। डॉ जेम्स एफ। गिंपेल

0

द्वारा लिखित पाठ्यचर्या वीटा और पुस्तकें देखें, जबकि हर कोई केवल सामान उद्धृत कर रहा है, उन्होंने यह नहीं समझाया कि यह "स्ट्राइंटर पॉइंटर ब्रैक" क्यों है। आप इसे आसानी से याद रखने में सक्षम होंगे और समझेंगे कि जब आप अंतर्निहित एल्गोरिदम के थर्मों में इसके बारे में सोचते हैं तो स्ट्रिपब्रैक क्यों:

POINTER के किसी भी वर्ण पाए जाने पर STRING BREAK स्कैन करते समय।

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