1 2/*-------------------------------------------------------------------------*/ 3/** 4 @file strlib.c 5 @author N. Devillard 6 @date Jan 2001 7 @version $Revision: 1.8 $ 8 @brief Various string handling routines to complement the C lib. 9 10 This modules adds a few complementary string routines usually missing 11 in the standard C library. 12*/ 13/*--------------------------------------------------------------------------*/ 14 15/* 16 $Id: strlib.c,v 1.8 2002/12/12 10:29:16 ndevilla Exp $ 17 $Author: ndevilla $ 18 $Date: 2002/12/12 10:29:16 $ 19 $Revision: 1.8 $ 20*/ 21 22/*--------------------------------------------------------------------------- 23 Includes 24 ---------------------------------------------------------------------------*/ 25 26#include <string.h> 27#include <ctype.h> 28 29#include "strlib.h" 30 31/*--------------------------------------------------------------------------- 32 Defines 33 ---------------------------------------------------------------------------*/ 34#define ASCIILINESZ 1024 35 36/*--------------------------------------------------------------------------- 37 Function codes 38 ---------------------------------------------------------------------------*/ 39 40 41/*-------------------------------------------------------------------------*/ 42/** 43 @brief Convert a string to lowercase. 44 @param s String to convert. 45 @return ptr to statically allocated string. 46 47 This function returns a pointer to a statically allocated string 48 containing a lowercased version of the input string. Do not free 49 or modify the returned string! Since the returned string is statically 50 allocated, it will be modified at each function call (not re-entrant). 51 */ 52/*--------------------------------------------------------------------------*/ 53 54char * strlwc(const char * s) 55{ 56 static char l[ASCIILINESZ+1]; 57 int i ; 58 59 if (s==NULL) return NULL ; 60 memset(l, 0, ASCIILINESZ+1); 61 i=0 ; 62 while (s[i] && i<ASCIILINESZ) { 63 l[i] = (char)tolower((int)s[i]); 64 i++ ; 65 } 66 l[ASCIILINESZ]=(char)0; 67 return l ; 68} 69 70 71 72/*-------------------------------------------------------------------------*/ 73/** 74 @brief Convert a string to uppercase. 75 @param s String to convert. 76 @return ptr to statically allocated string. 77 78 This function returns a pointer to a statically allocated string 79 containing an uppercased version of the input string. Do not free 80 or modify the returned string! Since the returned string is statically 81 allocated, it will be modified at each function call (not re-entrant). 82 */ 83/*--------------------------------------------------------------------------*/ 84 85char * strupc(char * s) 86{ 87 static char l[ASCIILINESZ+1]; 88 int i ; 89 90 if (s==NULL) return NULL ; 91 memset(l, 0, ASCIILINESZ+1); 92 i=0 ; 93 while (s[i] && i<ASCIILINESZ) { 94 l[i] = (char)toupper((int)s[i]); 95 i++ ; 96 } 97 l[ASCIILINESZ]=(char)0; 98 return l ; 99} 100 101 102 103/*-------------------------------------------------------------------------*/ 104/** 105 @brief Skip blanks until the first non-blank character. 106 @param s String to parse. 107 @return Pointer to char inside given string. 108 109 This function returns a pointer to the first non-blank character in the 110 given string. 111 */ 112/*--------------------------------------------------------------------------*/ 113 114char * strskp(char * s) 115{ 116 char * skip = s; 117 if (s==NULL) return NULL ; 118 while (isspace((int)*skip) && *skip) skip++; 119 return skip ; 120} 121 122 123 124/*-------------------------------------------------------------------------*/ 125/** 126 @brief Remove blanks at the end of a string. 127 @param s String to parse. 128 @return ptr to statically allocated string. 129 130 This function returns a pointer to a statically allocated string, 131 which is identical to the input string, except that all blank 132 characters at the end of the string have been removed. 133 Do not free or modify the returned string! Since the returned string 134 is statically allocated, it will be modified at each function call 135 (not re-entrant). 136 */ 137/*--------------------------------------------------------------------------*/ 138 139char * strcrop(char * s) 140{ 141 static char l[ASCIILINESZ+1]; 142 char * last ; 143 144 if (s==NULL) return NULL ; 145 memset(l, 0, ASCIILINESZ+1); 146 strcpy(l, s); 147 last = l + strlen(l); 148 while (last > l) { 149 if (!isspace((int)*(last-1))) 150 break ; 151 last -- ; 152 } 153 *last = (char)0; 154 return l ; 155} 156 157 158 159/*-------------------------------------------------------------------------*/ 160/** 161 @brief Remove blanks at the beginning and the end of a string. 162 @param s String to parse. 163 @return ptr to statically allocated string. 164 165 This function returns a pointer to a statically allocated string, 166 which is identical to the input string, except that all blank 167 characters at the end and the beg. of the string have been removed. 168 Do not free or modify the returned string! Since the returned string 169 is statically allocated, it will be modified at each function call 170 (not re-entrant). 171 */ 172/*--------------------------------------------------------------------------*/ 173char * strstrip(char * s) 174{ 175 static char l[ASCIILINESZ+1]; 176 char * last ; 177 178 if (s==NULL) return NULL ; 179 180 while (isspace((int)*s) && *s) s++; 181 182 memset(l, 0, ASCIILINESZ+1); 183 strcpy(l, s); 184 last = l + strlen(l); 185 while (last > l) { 186 if (!isspace((int)*(last-1))) 187 break ; 188 last -- ; 189 } 190 *last = (char)0; 191 192 return (char*)l ; 193} 194 195/* Test code */ 196#ifdef TEST 197int main(int argc, char * argv[]) 198{ 199 char * str ; 200 201 str = "\t\tI'm a lumberkack and I'm OK " ; 202 printf("lowercase: [%s]\n", strlwc(str)); 203 printf("uppercase: [%s]\n", strupc(str)); 204 printf("skipped : [%s]\n", strskp(str)); 205 printf("cropped : [%s]\n", strcrop(str)); 206 printf("stripped : [%s]\n", strstrip(str)); 207 208 return 0 ; 209} 210#endif 211/* vim: set ts=4 et sw=4 tw=75 */ 212