How to remove (trim) leading and trailing whitespace from a string in C

3 Answers

0 votes
#include <stdio.h>
#include <string.h>
  
#define LEN 50

void my_ltrim(char s[]);
void my_rtrim(char s[]);
  
int main(void)
{
    char s[LEN] = "   \n   \t  abcd efg     \n   \t   ";
      
    my_rtrim(s);
    my_ltrim(s);
    printf("s = %s\n", s);
     
    return 0;
}
 
void my_ltrim(char s[]) 
{ 
    int i, j, in_first_char = 0;
    
    for (i = 0, j = 0; i < strlen(s); i++) 
    {
         if ( (s[i] != ' ' && s[i] != '\n' && s[i] != '\t') || in_first_char == 1) 
         {
             s[j++] = s[i];
             in_first_char = 1;
         }
    }
    s[j] = '\0'; 
} 
void my_rtrim(char s[]) 
{ 
    int i;
     
    for (i = strlen(s) - 1; i >= 0; i--) 
         if (s[i] != ' ' && s[i] != '\n' && s[i] != '\t') 
             break; 
    s[i + 1] = '\0'; 
} 
  
/*
run:
    
s = abcd efg
 
*/

 



answered Nov 13, 2015 by avibootz
0 votes
#include <stdio.h>
#include <string.h>
  
#define LEN 50

void my_trim(char s[]);
void my_ltrim(char s[]);
void my_rtrim(char s[]);
  
int main(void)
{
    char s[LEN] = "   \n   \t  abcd efg     \n   \t   ";
      
    my_trim(s);
    printf("s = %s\n", s);
     
    return 0;
}
 
void my_trim(char s[])  
{
    my_rtrim(s);
    my_ltrim(s); 
}
void my_ltrim(char s[]) 
{ 
    int i, j, in_first_char = 0;
    
    for (i = 0, j = 0; i < strlen(s); i++) 
    {
         if ( (s[i] != ' ' && s[i] != '\n' && s[i] != '\t') || in_first_char == 1) 
         {
             s[j++] = s[i];
             in_first_char = 1;
         }
    }
    s[j] = '\0'; 
} 
void my_rtrim(char s[]) 
{ 
    int i;
     
    for (i = strlen(s) - 1; i >= 0; i--) 
         if (s[i] != ' ' && s[i] != '\n' && s[i] != '\t') 
             break; 
    s[i + 1] = '\0'; 
} 
  
/*
run:
    
s = abcd efg
 
*/

 



answered Nov 13, 2015 by avibootz
0 votes
#include <stdio.h>
#include <ctype.h>
#include <string.h>
  
#define LEN 50

char *my_trim(char *str);
  
int main(void)
{
    char s[LEN] = "\n   \n   \t  abcd efg     \n   \t   \n";
    char *p = s;
  
    p = my_trim(p);
    printf("p = %s\n", p); // p point to s[11]
     
    return 0;
}
 
char *my_trim(char *p)
{
  char *end;

  while (isspace(*p) || *p == '\n' || *p == '\t') p++;

  if (*p == 0)  
      return p;

  end = p + strlen(p) - 1;
  while (end > p && (isspace(*end) || *end == '\n' || *end == '\t')) end--;

  *(end + 1) = 0;

  return p;
}
  
/*
run:
    
p = abcd efg
 
*/

 



answered Nov 13, 2015 by avibootz

Related questions

1 answer 202 views
1 answer 205 views
1 answer 171 views
1 answer 174 views
1 answer 168 views
1 answer 94 views
...