से पहला और अंतिम अक्षर स्ट्रिप करें मेरे पास एक सी स्ट्रिंग है जो "Nmy stringP"
जैसा दिखती है, जहां एन और पी कोई चरित्र हो सकता है। मैं इसे सी में "my string"
में कैसे संपादित कर सकता हूं?सी स्ट्रिंग
उत्तर
दूसरे चरित्र के लिए 1 चरित्र बिंदु "निकालें" करने के लिए:
char mystr[] = "Nmy stringP";
char *p = mystr;
p++; /* 'N' is not in `p` */
अंतिम वर्ण को निकालने के लिए एक '\ 0' से बदलने
p[strlen(p)-1] = 0; /* 'P' is not in `p` (and it isn't in `mystr` either) */
यह काम नहीं कर सकता है क्योंकि "निमी स्ट्रिंगपी" को शाब्दिक रूप से प्रारंभ करके, कंपाइलर/लिंकर इसे केवल स्मृति में ही रख सकता है, जिससे संपादन विफल हो जाता है। – Suppressingfire
@Suppressingfire: "नेमी स्ट्रिंगपी" वास्तव में एक शाब्दिक स्ट्रिंग है, लेकिन इसकी प्रतिलिपि बनाई गई है (char द्वारा char) सरणी 'mystr' में। सरणी 'mystr' संशोधित है। – pmg
@ अपराह्न: आप कहां कॉपी कर रहे हैं? 'char * p = mystr' अंक' p' 'mystr' पर, यह 'mystr' की प्रतिलिपि नहीं करता है। – quark
लिए सबसे कारगर तरीका:
//Note destroys the original string by removing it's last char
// Do not pass in a string literal.
char * getAllButFirstAndLast(char *input)
{
int len = strlen(input);
if(len > 0)
input++;//Go past the first char
if(len > 1)
input[len - 2] = '\0';//Replace the last char with a null termination
return input;
}
//...
//Call it like so
char str[512];
strcpy(str, "hello world");
char *pMod = getAllButFirstAndLast(str);
सबसे सुरक्षित तरीका:
void getAllButFirstAndLast(const char *input, char *output)
{
int len = strlen(input);
if(len > 0)
strcpy(output, ++input);
if(len > 1)
output[len - 2] = '\0';
}
//...
//Call it like so
char mod[512];
getAllButFirstAndLast("hello world", mod);
दूसरा तरीका कम कुशल है लेकिन यह सुरक्षित है क्योंकि आप स्ट्रिंग अक्षर में इनपुट में पास कर सकते हैं। यदि आप इसे स्वयं लागू नहीं करना चाहते हैं तो आप दूसरे तरीके से स्ट्रड का भी उपयोग कर सकते हैं।
समस्या जो मैं आपके दूसरे कार्यान्वयन के साथ देखता हूं वह यह है कि आपको यह सुनिश्चित करना होगा कि आपका आउटपुट पर्याप्त बड़ा हो आपको कॉल करने से पहले कॉपी को संभालने के लिए AllBufFirstAndLast()। इस मामले में, मैं कॉल में आउटपुट लम्बाई वैरिएबल जोड़ने की सलाह दूंगा और कॉल किए गए फ़ंक्शन को strn * फ़ंक्शंस के साथ आउटपुट का उपयोग करने दें। – shank
हाँ यह एक पूर्व शर्त है, हाँ आप एक लंबाई पैरामीटर जोड़ सकते हैं। –
एक अन्य विकल्प, फिर यह सोचते हैं "संपादित करें" का मतलब है कि आप जगह में बदलाव करना चाहते हैं:
void topntail(char *str) {
size_t len = strlen(str);
assert(len >= 2); // or whatever you want to do with short strings
memmove(str, str+1, len-2);
str[len-2] = 0;
}
इस जगह में स्ट्रिंग को संशोधित करता है, एक नया पता पैदा करने के रूप में पीएमजी के समाधान करता है बिना। ऐसा नहीं है कि पीएमजी के जवाब में कुछ भी गलत है, लेकिन कुछ मामलों में यह वही नहीं है जो आप चाहते हैं।
इसके अलावा, ध्यान दें कि आप एक बयान में दोनों कार्य कर सकते हैं:
char mystr[] = "Nmy stringP";
char *p = mystr;
p++[strlen(p)-1] = 0;
यह संभावना काम करेंगे की उम्मीद है, लेकिन व्यवहार सी मानक में अपरिभाषित है के रूप में।
यह सबसे अच्छा है हालांकि अपरिभाषित व्यवहार पर भरोसा नहीं करना है। – T0xicCode
@ xav0989 सहमत हुए, मैं एक टिप्पणी के रूप में इसे और अधिक जोड़ने का कारण (इसे करने के कारण को हाइलाइट करने के लिए), वैकल्पिक जवाब के रूप में नहीं। मैं इस पर थोड़ा नया हूँ। –
- 1. सी # स्ट्रिंग
- 2. स्ट्रिंग सी
- 3. सी ++ स्ट्रिंग
- 4. सी # स्ट्रिंग
- 5. सी # स्ट्रिंग
- 6. स्ट्रिंग। सी #
- 7. सी # स्ट्रिंग
- 8. सी # स्ट्रिंग
- 9. सी # स्ट्रिंग
- 10. सी # स्ट्रिंग
- 11. सी # - स्ट्रिंग
- 12. सी # स्ट्रिंग
- 13. एसडीआईजी स्ट्रिंग :: स्ट्रिंग और सी # रेफ स्ट्रिंग
- 14. सी/सी ++ स्ट्रिंग मेमोरी लीक?
- 15. सी # से सी ++ प्रक्रिया स्ट्रिंग
- 16. सी-शैली स्ट्रिंग को एक सी ++ std :: स्ट्रिंग
- 17. सी स्टाइल स्ट्रिंग को सी ++ स्टाइल स्ट्रिंग में परिवर्तित करना
- 18. सी #: स्प्लिट स्ट्रिंग और कई स्ट्रिंग चर
- 19. सी स्ट्रिंग ट्रैवर्सिंग: स्ट्रिंग का अंतिम शब्द
- 20. ऑब्जेक्टिव-सी स्ट्रिंग स्वरूपण
- 21. स्ट्रिंग शाब्दिक सी
- 22. एक स्ट्रिंग (सी ++)
- 23. सी # स्ट्रिंग [] int []
- 24. सी # एक स्ट्रिंग
- 25. सी # स्ट्रिंग प्रतिस्थापन
- 26. सी # स्विच-केस स्ट्रिंग
- 27. सी ++ त्रुटि: 'स्ट्रिंग'
- 28. एक स्ट्रिंग स्थिति (सी #)
- 29. उद्देश्य सी - स्ट्रिंग
- 30. सी # स्ट्रिंग बिल्डर
गृहकार्य? यदि यह है तो "होमवर्क" टैग जोड़ें। – pmg
नहीं, होमवर्क नहीं - बस मज़ा के लिए सी सीखने की कोशिश कर रहा है। – igul222
शुद्ध सी में "स्ट्रिंग" जैसी कोई चीज़ नहीं है। क्या आपके पास बफर ('char *') या एक वर्ण सरणी ('char []') के लिए पॉइंटर है? –