-
Notifications
You must be signed in to change notification settings - Fork 0
/
UtilCadena.c
169 lines (141 loc) · 3.11 KB
/
UtilCadena.c
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
/**/
/* @brief Utilidades de transformacion de cadenas*/
/**/
/* Este modulo contiene el codigo de las funciones de transformacion de cadenas*/
/* @file UtilCadena.c*/
/* @author Carlos Carrascal*/
/* @date 23-11-2010*/
/**/
#include "UtilCadena.h"
STATUS eliminaCars(char * dst, char * ori, char * seps)
{
char *p=NULL;
if(dst==NULL || ori==NULL || seps==NULL)
return ERR;
strcpy(dst,ori);
/*Quita los caracteres que se especifican en seps*/
p=strpbrk(dst,seps);
/*Desde que encuentra un caractero prohibido, hasta que se acaba la cadena*/
while(p!=NULL)
{
p[0]=' ';
p=strpbrk(p+1,seps);
}
dst[strlen(ori)]='\0';
return OK;
}
STATUS aMayusculas(char * dst, char * ori)
{
int i=-1;
if(dst==NULL || ori==NULL)
return ERR;
/*Recorre secuencialmente la cadena pasándola a mayusculas*/
for(i=0;ori[i]; i++)
{
dst[i] = toupper(ori[i]);
}
dst[strlen(ori)]='\0';
return OK;
}
STATUS reemplazaAsterisco(char * dst, char * ori, char * ins)
{
int tam=strlen(ori),i=-1, j=-1;
if(dst==NULL||ori==NULL||ins==NULL)
return ERR;
/*Ira buscando caracter a caracter de ori viendo si es o no*/
for(i=0, j=0;i<tam;i++)
{
/*Si encuentra asterisco, copia en su lugar ins, y aumenta la posicion tanto como el tamaño de ins*/
if(ori[i]=='*')
{
dst[j]=' ';
j++;
strcpy(&(dst[j]),ins);
j+=strlen(ins);
}
/*Si no lo es, seguimos copiando con normalidad*/
else
{
dst[j]=ori[i];
j++;
}
}
dst[j]='\0';
return OK;
}
STATUS limpiaEspacios(char * dst, char * ori)
{
int i=0, c=-1, j=-1;
char temp[MAX_LEN];
if(dst==NULL||ori==NULL)
return ERR;
/*Busca el primer espacio, y copia hasta ahí en tmp*/
while(ori[i]==' ')
i++;
strcpy(temp, &ori[i]);
/*Desde el final buscamos el primer caracter no espacio, y lo convertimos en el final de la cadena*/
i=strlen(temp)-1;
while(temp[i]==' ')
i--;
temp[i+1]='\0';
/*Se copia en dst desde temporal comprobando que no haya dos espacios seguidos, usando la flag 'c'*/
for(i=0, j=0, c=0;temp[i]!='\0'; i++)
{
if(temp[i]!=' ')
c=0;
if(c==0)
{
dst[j]=temp[i];
j++;
}
if(temp[i]==' ')
c++;
}
return OK;
}
STATUS limpiaPalabras(char * dst, char * ori)
{
char *s2[21], *aux="auxiliar";
int i=0, j=0, sum=0;
/*Lista de palabras indeseables*/
s2[0] = " LA ";
s2[1] = " EL ";
s2[2] = " LO ";
s2[3] = " LE ";
s2[4] = " SI ";
s2[5] = " LO ";
s2[6] = " LAS ";
s2[7] = " LES ";
s2[8] = " LOS ";
s2[9] = " UN ";
s2[10] = " UNA ";
s2[11] = " UNOS ";
s2[12] = " UNAS ";
s2[13] = " DE ";
s2[14] = " DEL ";
s2[15] = " A ";
s2[16] = " AL ";
s2[17] = " MI ";
s2[18] = " TU ";
s2[19] = " SU ";
s2[20] = " EN ";
/*Copiando la cadena en dst no modificamos la original*/
strcpy(dst, ori);
for (i=0;i<21;i++)
{
/*Buscamos la palabra s2[i] en dst*/
aux=strstr(dst, s2[i]);
while(aux!=NULL)
{ /*Convertimos la palabra exacta en espacios*/
j=0;
for(j=0;j<strlen(s2[i]);j++)
{
dst[strlen(dst)-strlen(aux)+j]=' ';
}
sum+=j;
aux=strstr(dst, s2[i]);
}
}
dst[MAX_LEN-sum]='\0';
return OK;
}