home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
listings
/
v_11_01
/
1101075b
< prev
next >
Wrap
Text File
|
1992-11-03
|
11KB
|
401 lines
/*****************************************************
File Name: STR_EDIT.C
Description: Library of functions for editing
strings
Global Function List: str_center
str_delete
str_insert
str_ljust
str_ltrim
str_mrplc
str_ocat
str_repeat
str_rjust
str_rplc
str_rtrim
str_trim
str_vcat
Portability: Standard C
******************************************************/
/* Standard C */
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
/* Own */
#include <str_edit.h>
/*****************************************************
Name: str_center
Parameters: Str - string to center
Len - num of chars of centered string
Return: Str
Description: Centers a string in a desired length
by removing tabs and adding spaces
to both sides of string.
*****************************************************/
char *str_center( char *Str, size_t Len )
{
size_t LenOrg;
/* Trim spaces and tabs off the string */
str_trim( Str, " \t" );
LenOrg = strlen( Str );
if ( Len <= LenOrg )
{
/* The desired string length is shorter than
** the original so return */
return ( Str );
}
/* Add the spaces to each side */
str_rjust( Str, ( LenOrg + Len ) / 2 );
str_ljust( Str, Len );
return ( Str );
} /* function str_center */
/*****************************************************
Name: str_delete
Parameters: Str - string to edit
Pos - index to start deleting chars at
Num - number of charcters to delete
Return: Str
Description: Modifies Str, by deleting Num chars
beginning at Pos.
*****************************************************/
char *str_delete( char *Str, char *Pos, size_t Num )
{
size_t Len = strlen( Str );
if ( ( Pos >= &Str[Len] ) || ( Num == 0 ) )
{
/* Outside string or no chars to delete */
return ( Str );
}
Num = min( Num, strlen( Pos ) );
if ( Num )
{
/* Delete characters by contactenating */
memmove( Pos, &Pos[Num],
strlen( &Pos[Num] ) + 1 );
}
return ( Str );
} /* function str_delete */
/*****************************************************
Name: str_insert
Parameters: Str - string to edit
Pos - pointer to location withing Str
Insrt - string to insert into Str
Return: Str
Description: Inserts a string Insrt into Str at Pos
*****************************************************/
char *str_insert( char *Str, char *Pos, char *Insrt )
{
size_t Len = strlen( Insrt );
char *Tmp = &Pos[Len];
memmove( Tmp, Pos, strlen( Pos ) + 1 );
memmove( Pos, Insrt, Len );
return ( Str );
} /* function str_insert */
/*****************************************************
Name: str_ljust
Parameters: Str - string to left justify
Len - length of string
Return: Str
Description: Pads right end of Str with spaces to
left justify Str to a new length Len.
*****************************************************/
char *str_ljust( char *Str, size_t Len )
{
size_t LenOrg = strlen( Str );
char *StrEnd = &Str[LenOrg];
Len = max( Len, LenOrg ) - LenOrg;
StrEnd[Len] = '\0';
while ( Len )
{
Len--;
StrEnd[Len] = ' ';
}
return ( Str );
} /* function str_ljust */
/*****************************************************
Name: str_ltrim
Parameters: Str - string to trim
Trim - string containing chars to trim
Return: Str
Description: Delete characters from the left end of
Str that are contained in Trim
*****************************************************/
char *str_ltrim( char *Str, char *Trim )
{
size_t Num = strspn( Str, Trim );
str_delete( Str, Str, Num );
return ( Str );
} /* function str_ltrim */
/*****************************************************
Name: str_mrplc
Expanded Name: String Multiple Search and Replace
Parameters: Str - string to edit
Find - search string
Rplc - replacement string
Return: Str
Description: Multiple search and replace. All
occurrences of Find within Str are
replaced with Rplc.
*****************************************************/
char *str_mrplc( char *Str, char *Find, char *Rplc )
{
char *StrWork = Str;
size_t LenRplc = strlen( Rplc );
while ( ( StrWork =
strstr( StrWork, Find ) ) != NULL )
{
str_delete( Str, StrWork, strlen( Find ) );
str_insert( Str, StrWork, Rplc );
StrWork += LenRplc;
}
return ( Str );
} /* function str_mrplc */
/*****************************************************
Name: str_ocat
Expanded Name: Concatenate overlapped strings
Parameters: Dest - destination string
Str - string to concat
Return: Dest
Description: Behaves the same as strcat in string.h.
This version will work for strings that
overlap in memory.
*****************************************************/
char *str_ocat( char *Dest, char *Str )
{
return ( (char *)memmove(
(void *)&Dest[strlen( Dest )],
(void *)Str, strlen( Str ) + 1 ) );
} /* function str_ocat */
/*****************************************************
Name: str_repeat
Parameters: Str - string buffer to load
Rpt - repition string
Num - number of repitions
Return: Str
Description: Builds a string of length Num, by
repeating a substring Rpt.
*****************************************************/
char *str_repeat( char *Str, char *Rpt, size_t Num )
{
size_t Len = strlen( Rpt );
if ( Len == 1 )
{
/* The string is only one character */
memset( Str, *Rpt, Num );
}
else
{
size_t i, j;
/* Build Str with repitions of Rpt */
for ( i = 0, j = 0; i < Num; i++ )
{
Str[i] = Rpt[j++];
j %= Len;
} /* for i */
} /* else */
Str[Num] = '\0';
return ( Str );
} /* function str_repeat */
/*****************************************************
Name: str_rplc
Expanded Name: String Search and Replace
Parameters: Str - string to edit
Find - search string
Rplc - replacement string
Return: Str
Description: Search and replace. First
occurrences of Find within Str is
replaced with Rplc.
*****************************************************/
char *str_rplc( char *Str, char *Find, char *Rplc )
{
char *StrWork = strstr( Str, Find );
if ( StrWork )
{
str_delete( Str, StrWork, strlen( Find ) );
str_insert( Str, StrWork, Rplc );
}
return ( Str );
} /* function str_rplc */
/*****************************************************
Name: str_rjust
Expanded Name: String Right Justify
Parameters: Str - string to edit
Len - new length of string
Return: Str
Description: Pads the left end of string so that it
is right justified to a total length of
Len.
*****************************************************/
char *str_rjust( char *Str, size_t Len )
{
size_t LenOrg = strlen( Str );
Len = max( LenOrg, Len ) - LenOrg;
if ( Len )
{
memmove( &Str[Len], Str, LenOrg + 1 );
while ( Len )
{
Len--;
Str[Len] = ' ';
}
}
return ( Str );
} /* function str_rjust */
/*****************************************************
Name: str_rtrim
Parameters: Str - string to trim
Trim - string of characters to trim
Return: Str
Description: Delete characters from the right end
of Str that are contained in Trim
*****************************************************/
char *str_rtrim( char *Str, char *Trim )
{
char *StrWork = &Str[strlen( Str ) - 1];
/* Look for last character in string not being
** in trim string */
while ( ( Str != StrWork ) &&
( strspn( StrWork, Trim ) != 0 ) )
{
*StrWork-- = '\0';
}
return ( Str );
} /* function str_rtrim */
/*****************************************************
Name: str_trim
Parameters: Str - string to trim
Trim - string of characters to trim
Return: Str
Description: Delete characters from both ends of Str
*****************************************************/
char *str_trim( char *Str, char *Trim )
{
str_ltrim( Str, Trim );
str_rtrim( Str, Trim );
return ( Str );
} /* function str_trim */
/*****************************************************
Name: str_vcat
Parameters: Dest - destination string
Str1 - required first string
Return: Dest
Description: Variable argument version of strcat.
Concatenates a list of strings into
a destination string. The last
argument must be a NULL pointer.
*****************************************************/
char *str_vcat( char *Dest, char *Str1, ... )
{
va_list VarArgList;
char *Str;
/* Initialize variable arguments */
va_start( VarArgList, Dest );
/* Get first var arg string */
Str = va_arg( VarArgList, char * );
strcat( Dest, Str1 );
while ( Str != NULL )
{
/* Loop though all the arguments */
strcat( Dest, Str );
/* Get the next string */
Str = va_arg( VarArgList, char * );
}
/* Clean up */
va_end( VarArgList );
return ( Dest );
} /* function str_vcat */
/* End of File */