Функция trim для C и C++ Печать
Добавил(а) microsin   

К сожалению, в стандартной библиотеке C нет функций для удаления из строки по краям неотображаемых символов (пробелов, табуляции и т. д.). В этой статье рассмотрены примеры кода для таких функций. Код взят со странички [1].

 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
void trim(char *s)
{
     // удаляем пробелы и табы с начала строки:
     int i=0,j;
     while((s[i]==' ')||(s[i]=='\t')) 
     {
          i++;
     }
     if(i>0) 
     {
          for(j=0; j < strlen(s); j++)
          {
              s[j]=s[j+i];
          }
          s[j]='\0';
     }
 
     // удаляем пробелы и табы с конца строки:
     i=strlen(s)-1;
     while((s[i]==' ')||(s[i]=='\t')) 
     {
          i--;
     }
     if(i < (strlen(s)-1))
     {
          s[i+1]='\0';
     }
}

Еще набор функций, использующий оператор &&:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
void rtrim( char * string, char * trim )
{
     // делаем обрезку справа
     int i;
     for( i = strlen (string) - 1; 
           i >= 0 && strchr (trim, string[i]) != NULL;
           i-- )
     {  
         // переставляем терминатор строки 
         string[i] = '\0';
     }
}
 
void ltrim( char * string, char * trim )
{
     // делаем обрезку слева
     while ( string[0] != '\0' && strchr ( trim, string[0] ) != NULL )
     {
         memmove( &string[0], &string[1], strlen(string) );
     }
}

[Ссылки]

1. Programming Strings site:wilsonmar.com.