LibRCG  3.1.1
rstring.c
Go to the documentation of this file.
1 
9 #include <string.h>
10 #include <stdlib.h>
11 #include <ctype.h>
12 #include "rstring.h"
13 
14 int trimStart(char* str)
15 {
16  int i,j,result;
17  if(!str) result=-1;
18  else
19  {
20  for(j=0;isspace(str[j]);j++);
21  if(j)
22  {
23  for(i=0;str[j];i++,j++)
24  {
25  str[i]=str[j];
26  }
27  str[i]=str[j];
28  result=i;
29  }
30  else result=strlen(str);
31  }
32  return result;
33 }
34 
35 //==============================================================================
36 
37 int trimEnd(char* str)
38 {
39  int i,result=0;
40  if(!str) result=-1;
41  else
42  {
43  for(i=strlen(str);isspace(str[i-1]);i--)
44  {
45  str[i-1]='\0';
46  }
47  result=i;
48  }
49  return result;
50 }
51 
52 //==============================================================================
53 
54 int trim(char* str)
55 {
56  int i,j,result=0;
57  if(!str) result=-1;
58  else
59  {
60  for(i=0;isspace(str[i]);i++);
61  for(j=0;str[i];i++)
62  {
63  if(!isspace(str[i])||!isspace(str[j-1]))
64  {
65  str[j]=str[i];
66  j++;
67  }
68  }
69  if(isspace(str[j-1]))
70  {
71  str[j-1]='\0';
72  result=j-1;
73  }
74  else
75  {
76  str[j]='\0';
77  result=j;
78  }
79  }
80  return result;
81 }
82 
83 //==============================================================================
84 
85 int charElem(char c,const char* str)
86 {
87  int i,result=0;
88  if(str)
89  {
90  for(i=0;str[i]&&!result;i++)
91  {
92  result=(c==str[i]);
93  }
94  }
95  return result;
96 }
97 
98 //==============================================================================
99 
100 List words(const char* str)
101 {
102  List l;
103  char *aux,*sub,*tmp;
104  int i,err;
105  if(!str) l=NULL;
106  else if(!str[0]) l=newList();
107  else
108  {
109  aux=strdup(str);
110  trim(aux);
111  sub=&aux[0];
112  l=newList();
113  for(i=0,err=0;aux[i]&&!err;i++)
114  {
115  if(isspace(aux[i]))
116  {
117  aux[i]='\0';
118  tmp=strdup(sub);
119  err=listInsertLst(l,tmp);
120  sub=&aux[i+1];
121  }
122  }
123  tmp=strdup(sub);
124  err=listInsertLst(l,tmp)&&err;
125  if(err)
126  {
127  listMap(l,free);
128  listDelete(l);
129  l=NULL;
130  }
131  else free(aux);
132  }
133  return l;
134 }
135 
136 //==============================================================================
137 
138 List strSep(const char* str,const char* delim)
139 {
140  List l;
141  char *aux,*tmp,*sub;
142  int i,err;
143  if(!str) l=NULL;
144  else if(!str[0]) l=newList();
145  else
146  {
147  aux=strdup(str);
148  sub=&aux[0];
149  l=newList();
150  for(i=0,err=0;aux[i]&&!err;i++)
151  {
152  if(1==charElem(aux[i],delim))
153  {
154  aux[i]='\0';
155  if(sub[0]!=aux[i])
156  {
157  tmp=strdup(sub);
158  err=listInsertLst(l,tmp);
159  }
160  sub=&aux[i+1];
161  }
162  }
163  if(sub[0]!=aux[i])
164  {
165  tmp=strdup(sub);
166  err=listInsertLst(l,tmp)&&err;
167  }
168  if(err)
169  {
170  listMap(l,free);
171  listDelete(l);
172  l=NULL;
173  }
174  else free(aux);
175  }
176  return l;
177 }
void listDelete(List list)
Deletes a list.
Definition: list.c:27
int charElem(char c, const char *str)
Checks if there is an occurrence of a specific character in a string.
Definition: rstring.c:85
int listInsertLst(List list, void *value)
Inserts an element at the end of a list.
Definition: list.c:79
int trimStart(char *str)
Removes leading whitespaces of a string.
Definition: rstring.c:14
int listMap(List list, void(*fun)(void *))
Applies a function to the elements of a list.
Definition: list.c:305
int trimEnd(char *str)
Removes trailing whitespaces of a string.
Definition: rstring.c:37
Implementation of functions to manipulate strings.
List strSep(const char *str, const char *delim)
Splits a string.
Definition: rstring.c:138
List words(const char *str)
Given a string, computes the list of words that the string contains.
Definition: rstring.c:100
Linked list structure.
Definition: list.h:37
int trim(char *str)
Removes leading and trailing whitespaces of a string, as well as consecutive whitespaces in the middl...
Definition: rstring.c:54
List newList(void)
Creates a list.
Definition: list.c:13

LibRCG © 2004-2015   Rui Carlos Gonçalves