2010-04-07 17 views
6

में स्ट्रिंग के अंतिम चार की जाँच के रूप में अगर मैं तार के दो प्रकार के होते हैं:

const char *str1 = "This is a string with \"quotes escaped at the end\""; 
const char *str2 = "This is a \"string\" without quotes at the end"; 

testFn(str1); 
testFn(str2); 

int testFn(const char *str) 
{ 
    // test & return 1 if ends on no quote 
    // test & return 0 if ends on quote 
    return; 
} 

मैं अगर स्ट्रिंग एक उद्धरण के साथ समाप्त होता है परीक्षण करना चाहते हैं "या नहीं

क्या एक अच्छा होगा इस परीक्षण के रास्ते धन्यवाद

+5

आपको इसे 'int testFn (const char * str)' –

+0

पर बदलना चाहिए सभी को धन्यवाद! – radar75

+1

उत्तर में से किसी एक को स्वीकार करने के लिए मत भूलना! ;-) – slacker

उत्तर

9

मत भूलना सुनिश्चित करें कि आपके स्ट्रिंग कम से कम 1 चरित्र है बनाने के लिए:

int testFn(const char *str) 
{ 
    return (str && *str && str[strlen(str) - 1] == '"') ? 0 : 1; 
} 
+0

पर क्रैश हो सकता है आपको परिणाम उलट दिया गया है। ओपी द्वारा दिए गए विनिर्देश की जांच करें। – slacker

+0

@ स्लेकर - हाँ, मैंने देखा कि मैंने इसे लिखने के बाद, लेकिन मैंने पहले ही अपना उदाहरण '?: ' –

+2

' (अभिव्यक्ति) के साथ अपडेट किया है? 0: 1' लिखने का एक मजेदार तरीका है '! (अभिव्यक्ति) ':) – caf

4
int testFn(const char *str) 
{ 
    return !str || !*str || str[strlen(str) - 1] != '\"'; 
} 
+2

0-लंबाई स्ट्रिंग को सही तरीके से संभाल नहीं करता है। –

+0

खाली स्ट्रिंग – slacker

1
int testFn(const char *str) 
{ 
    if(*str && str[strlen(str + 1)] == '"') 
    return 0; 
    else 
    return 1; 
} 
+0

आपका नल पॉइंटर पर क्रैश ;-) –

+0

@ पीटर टोरोक: निश्चित रूप से यह करता है। इसे इस समारोह में पास न करें, फिर :)। – slacker

+0

यदि आप मेरे लिए शून्य-लंबाई वाली स्ट्रिंग पास नहीं करते हैं, तो मैं आपके लिए एक शून्य सूचक नहीं पारित करूंगा, ठीक है? :-) –

-1

एक शून्य लंबाई स्ट्रिंग ... एक स्ट्रिंग नहीं है, एक संख्या के साथ - मुझे परवाह नहीं है कि आप इसे कैसे परिभाषित करते हैं। नल पॉइंटर्स को अपने हैंडलिंग की आवश्यकता होती है क्योंकि वे अपनी श्रेणी हैं। वापस मूर्खता के लिए पॉइंटर्स हैं लेकिन वे आपको अभी तक ले जाएंगे। आपको सब कुछ परिभाषित करना है। मैं शून्य पॉइंटर्स से शुरू करता हूं क्योंकि कुछ भी उन्हें संभालता है। रुको ... पायथन करता है। शायद आप गलत मंच पर हैं।

अब मुझे अपना सेगफॉल्ट फ़ंक्शन ढूंढना होगा। मुझे पता है मैंने इसे लिखा क्योंकि यह संदर्भित प्राणियों को रखता है - मुझे बस यह नहीं मिल रहा है।

+0

यह प्रश्न का उत्तर नहीं प्रदान करता है। एक बार आपके पास पर्याप्त [प्रतिष्ठा] (https://stackoverflow.com/help/whats-reputation) हो जाने पर आप [किसी भी पोस्ट पर टिप्पणी कर सकेंगे] (https://stackoverflow.com/help/privileges/comment); इसके बजाय, [उन उत्तरों को प्रदान करें जिन्हें पूछताछ से स्पष्टीकरण की आवश्यकता नहीं है] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-कर-बजाय)। - [समीक्षा से] (/ समीक्षा/कम गुणवत्ता वाली पोस्ट/18842954) –