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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
|
#include <ctype.h>
#include "strutil.h"
const char *
left_trimmed (const char * s)
{
const char * p;
for (p = s; *p != 0 && isspace (*p); p++);
return p;
}
void
trim_right (char * s)
{
char * p;
char * herep;
enum { BLANKS, NONBLANKS } state = NONBLANKS;
for (herep = 0, p = s; *p != 0; p++)
{
switch (state)
{
case BLANKS:
if (!isspace (*p))
state = NONBLANKS;
break;
case NONBLANKS:
if (isspace (*p))
{
herep = p;
state = BLANKS;
}
}
}
if (state == BLANKS)
*herep = 0;
}
#ifdef TESTMAIN
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void
printout (const char * s)
{
printf("\"%s\"\n", s);
}
int
main (void)
{
static const char * teststrings [] = {
"autoksiko",
" autoksiko",
"autoksiko ",
" autoksiko ",
"autoksiko teen",
" autoksiko teen",
"autoksiko teen ",
" autoksiko teen ",
" miljoona miljoona ruusua ",
0 };
int i;
for (i = 0; teststrings [i] != 0; i++)
{
char * ts;
char * orig_ts;
orig_ts = ts = strdup (teststrings [i]);
if (ts == 0)
exit (EXIT_FAILURE);
printf ("Plain: ");
printout (ts);
printf ("Left-trimmed: ");
printout (left_trimmed (ts));
printf ("Right-trimmed: ");
trim_right (ts);
printout (ts);
printf ("Completely trimmed: ");
printout (left_trimmed (ts));
puts ("");
free (orig_ts);
}
return 0;
}
#endif /* TESTMAIN */
|