I added a new function for the xstdlib, “str_pad()”. It’s similar to PHP’s str_pad.
Pad a string to a certain length with another string.
Definition:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | char *str_pad(const char *str, char *buffer, unsigned int pad_length, const char *pad_str, unsigned short pad_type) { int str_size = (int)strlen(str); int pad_str_size = (int)strlen(pad_str); int pads = (pad_length - str_size) / pad_str_size; int left_over = (pad_length - str_size) - pads * pad_str_size; int i; if (str_size == pad_length) { strcpy(buffer, str); return buffer; } if (pad_type == STR_PAD_BOTH) { pads /= 2; pad_type |= STR_PAD_LEFT | STR_PAD_RIGHT; } if (pad_type & STR_PAD_LEFT) { strcpy(buffer, pad_str); for (i = 1; i < pads; i++) strcat(buffer, pad_str); if (!(pad_type & STR_PAD_RIGHT)) strncat(buffer, pad_str, left_over); strcat(buffer, str); } if (pad_type & STR_PAD_RIGHT) { if (!(pad_type & STR_PAD_LEFT)) strcpy(buffer, str); for (i = 0; i <= pads; i++) strncat(buffer, pad_str, pad_str_size); strncat(buffer, pad_str, left_over); } buffer[pad_length] = '\0'; return buffer; } |
Usage:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <stdio.h> #include <string.h> #include <xstdlib.h> #define NAME_STR_SIZE 16 int main(void) { char name[NAME_STR_SIZE] = "Rashaud"; char padded_name[NAME_STR_SIZE]; str_pad(name, padded_name, NAME_STR_SIZE, "_", STR_PAD_LEFT); printf("padded_name = %s\n", padded_name); printf("padded_str_size = %d\n", (int)strlen(padded_name)); return 0; } |
Output:
padded_name = _________Rashaud
padded_str_size = 16