/*********************************************************************
NAME
shrink_space - shrink one or more space to one space.
SYNOPSIS
char *shrink_space(char *dest, char const *src, size_t n);
DESCRIPTION
shrink one or more space to one space, space characters
include : ' ', '\n', '\r', '\t' these four characters.
**********************************************************************/
#include <stdio.h>
#include <stdlib.h>
char *shrink_space(char *dest, char const *src, size_t n)
{
int i = 0, isspace = 0;
char *ret = dest;
if (NULL == src || NULL == dest)
{
printf("src or dest is NULL\n");
return ret;
}
*dest++ = *src;
for (i = 1; i < n; i++)
{
if ('\t' == *src ||' ' == *src ||'\n' == *src ||'\r' == *src) // check if preceding charater is a space.
{
isspace = 1;
}
else
{
isspace = 0;
}
src++;
if ((isspace == 1) && ('\t' == *src ||' ' == *src ||'\n' == *src ||'\r' == *src)) // check if the next charater is a space.
{
continue; // if preceding charater is space and the next is space too, ignore the charater.
}
*dest++ = *src;
}
*dest = '\0';
return ret;
}
int main(void)
{
int n = 0;
char a[] = " This Content hoho is ok \
ok?\
\
file system\
uttered words ok ok ?\
end.";
char *dest = NULL;
n = sizeof(a);
printf("n = %d\n", n);
dest = (char *)malloc(n);
printf("\n%s\n", a);
printf("%s\n", shrink_space(dest, a, n));
free(dest);
dest = NULL;
}