home   articles   tags   browse code   

C++ str_pad


 

#include <iostream>
#include <string>

using namespace std;
enum STR_PAD {STR_PAD_RIGHT, STR_PAD_LEFT, STR_PAD_BOTH};

string str_pad(const string &str, int pad_length, string pad_string=" ", STR_PAD pad_type=STR_PAD_RIGHT)
{
    int i,j,x;
    int str_size = str.size();
    int pad_size = pad_string.size();
    if (pad_length<=str_size || pad_size<1)
        return str;

    string o;
    o.reserve(pad_length);//allocate enough memory only once

    if (pad_type==STR_PAD_RIGHT)
    {
        for(i=0,x=str_size; i<x; i++)
            o.push_back( str[i] );
        for(i=str_size; i<pad_length; )
            for(j=0; j<pad_size && i<pad_length; j++,i++)
                o.push_back( pad_string[j] );
    }
    else if (pad_type==STR_PAD_LEFT)
    {
        int a1= pad_length-str_size;
        for(i=0; i<a1; )
            for(j=0; j<pad_size && i<a1; j++,i++)
                o.push_back( pad_string[j] );
        for(i=0,x=str_size; i<x; i++)
            o.push_back( str[i] );
    }
    else if (pad_type==STR_PAD_BOTH)
    {
        int a1= (pad_length-str_size)/2;
        int a2= pad_length-str_size-a1;
        for(i=0; i<a1; )
            for(j=0; j<pad_size && i<a1; j++,i++)
                o.push_back( pad_string[j] );
        for(i=0,x=str_size; i<x; i++)
            o.push_back( str[i] );
        for(i=0; i<a2; )
            for(j=0; j<pad_size && i<a2; j++,i++)
                o.push_back( pad_string[j] );
    }
    return o;
}

int main(int argc, char *argv[])
{

    cout <<"|"<< str_pad("john",20)                   <<"|"<< endl;
    cout <<"|"<< str_pad("john",20,"-")               <<"|"<< endl;
    cout <<"|"<< str_pad("john",20,"-",STR_PAD_LEFT)  <<"|"<< endl;
    cout <<"|"<< str_pad("john",20,"-",STR_PAD_RIGHT) <<"|"<< endl;
    cout <<"|"<< str_pad("john",20,"-",STR_PAD_BOTH)  <<"|"<< endl;
    cout <<"|"<< str_pad("john",20,"=-",STR_PAD_LEFT) <<"|"<< endl;
    cout <<"|"<< str_pad("john",20,"=-",STR_PAD_RIGHT)<<"|"<< endl;
    cout <<"|"<< str_pad("john",20,"=-",STR_PAD_BOTH) <<"|"<< endl;
    cout <<"|"<< str_pad("john",0,"-")                <<"|"<< endl;
    cout <<"|"<< str_pad("john",-10," ")              <<"|"<< endl;
    cout <<"|"<< str_pad("john",20,"")                <<"|"<< endl;

    return 0;
}
 

Tags: c++
 


 

 



Related Articles
 


home  |  privacy policy  |  terms of use  |  contact  


©2010, Zedwood Digital