Quantcast
Channel: Maris Labs
Viewing all articles
Browse latest Browse all 19

str_pad() new to xstdlib

$
0
0

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


Viewing all articles
Browse latest Browse all 19

Trending Articles