आप इस समस्या के लिए अपना कार्य लिखने का प्रयास कर सकते हैं।
/**
* Returns a sting "str" centered in string of a length width "new_length".
* Padding is done using the specified fill character "placeholder".
*/
char *
str_center(char str[], unsigned int new_length, char placeholder)
{
size_t str_length = strlen(str);
// if a new length is less or equal length of the original string, returns the original string
if (new_length <= str_length)
return str;
char *buffer;
unsigned int i, total_rest_length;
buffer = malloc(sizeof(char) * new_length);
// length of a wrapper of the original string
total_rest_length = new_length - str_length;
// write a prefix to buffer
i = 0;
while (i < (total_rest_length/2)) {
buffer[i] = placeholder;
++i;
}
buffer[i + 1] = '\0';
// write the original string
strcat(buffer, str);
// write a postfix to the buffer
i += str_length;
while (i < new_length) {
buffer[i] = placeholder;
++i;
}
buffer[i + 1] = '\0';
return buffer;
}
परिणाम:
puts(str_center("A", 0, '-')); // A
puts(str_center("A", 1, '-')); // A
puts(str_center("A", 10, '-')); // ----A-----
puts(str_center("text", 10, '*')); // ***text***
puts(str_center("The C programming language", 26, '!')); // The C programming language
puts(str_center("The C programming language", 27, '!')); // The C programming language!
puts(str_center("The C programming language", 28, '!')); // !The C programming language!
puts(str_center("The C programming language", 29, '!')); // !The C programming language!!
puts(str_center("The C programming language", 30, '!')); // !!The C programming language!!
puts(str_center("The C programming language", 31, '!')); // !!The C programming language!!!
स्रोत
2017-02-15 12:05:24
पहला सुझाव: कैसे इस स्मृति लीक बिना impl'd जा सकता है? – kevinarpe
यदि आप कुछ मानदंडों के आधार पर कुछ बफर को आवंटित करते हैं जो अनुचित नहीं लगते हैं (उदाहरण के लिए, 20 से अधिक तर्क एक प्रिंटफ के लिए केंद्रित नहीं होंगे, और केंद्रित परिणामों में से कोई भी 200 बाइट से अधिक नहीं होगा), आप केंद्र को दे सकते हैं फ़ंक्शन बस प्रत्येक आमंत्रण पर बफर घुमाएं। – hlovdal