ऐसा करने के लिए कोई मानक और तेज़ तरीका नहीं है। मैं कुछ विकल्पों के बारे में सोच सकता हूं।
मान लीजिए हमने:
char *text = new char[20];
cin >> text;
नोट - हम जरूरत पता चला है कि क्षमता 20 है! मैं आपको इसके लिए कुछ स्थिरता का उपयोग करने की सलाह दूंगा, खासकर यदि यह अन्य तारों के लिए भी उपयोग किया जाएगा।
ठीक है, पहला विकल्प - का उपयोग std::stringstream
std::stringstream ss;
ss << setw(20 - 1) << setfill('-') << text;
// ^^^^ we need one byte for the '\0' char at the end
ss >> text;
लेकिन इस बल्कि धीमी है।
हाथ से वर्ण भरें:
int length = strlen(text);
for(int i = length; i < 20 - 1; ++i) // again - "20-1" - '\0'
{
text[ i ] = '-';
}
text[ 20 - 1 ] = '\0'; // don't forget to NULL-terminate the string
और सबसे अच्छा तरीका है, मेरे हिसाब से - (आप c++ के रूप में प्रश्न टैग किया है इन char*
चीजों से छुटकारा पाने के) और बस std::string
का उपयोग करें।
std::string sText;
std::cin >> sText;
sText.resize(20, '-'); // NOTE - no need to NULL-terminate anything
देखा! (:
इस तरह और अधिक स्पष्ट है और आप delete[]
से पहले अंत में delete[] text;
का उपयोग कर (जो कभी कभी कि तुच्छ नहीं है, विशेष रूप से कुछ अपवाद के मामले में के बारे में ले जाने की जरूरत नहीं है - यह आप 100 दे देंगे % स्मृति रिसाव। बेशक, आप हमेशा स्मार्ट संकेत दिए गए .. लेकिन स्मार्ट संकेत इस बात के लिए उपयोग कर सकते हैं ?! :))
बेशक
, आप 20-1
के बजाय 19
लिख सकते हैं, मैं तो बस के लिए "आकर्षण" चाहता था -1
, यदि आप कुछ स्थिर का उपयोग करते हैं।
स्रोत
2011-06-12 10:58:27
यदि आप '-1' को हाइलाइट करना चाहते हैं, तो क्यों न केवल' 20' के बजाय स्थिर का उपयोग करें? :) जादुई संख्या ftl। – Xeo
क्योंकि यदि इस आकार का अब और उपयोग नहीं किया जाएगा, तो कोड की 2-3 पंक्तियों के लिए निरंतर जोड़ने की आवश्यकता नहीं है (जो _are_ दूसरे के बाद एक है)। या कम से कम, मैं नहीं करूँगा। ध्यान दें कि मैंने पहले से ही अन्य मामले में निरंतर उपयोग करने के लिए @ एटीए की सलाह दी है। –