sisoputnfrba / so-commons-library

TADs de uso comun en aplicaciones desarrolladas en C
http://sisoputnfrba.github.io/so-commons-library/
GNU General Public License v3.0
106 stars 174 forks source link

Nuevas features para string #122

Closed RaniAgus closed 3 years ago

RaniAgus commented 4 years ago

Este PR incluye:

  1. Fix del bug de string_split (https://github.com/sisoputnfrba/so-commons-library/issues/57) , ahora usa strsep en vez de strtok_r, lo cual permite que se comporte como se esperaba:
//Antes: 
string_split("//path//to/file/","/"); => { "path", "to","file", NULL }
string_split("", "/") => { NULL } 
//Ahora: 
string_split("//path//to/file/","/"); => { "", "", "path", "", "to", "file", "", NULL }
string_split("","/") => { "", NULL }
  1. Un par de funciones muy sencillas para manejar arrays de strings: 2.1. string_array_new 2.2. string_array_size (https://github.com/sisoputnfrba/so-commons-library/issues/43) y string_array_is_empty 2.3. string_array_push, pop y replace

Para hacer push, funciona igual que como se hace en el _string_split original: hace realloc cada vez que se agregue un elemento. Para hacer pop, solamente alcanza con reemplazar la posición en donde estaba por NULL (y se devuelve como en un list_remove).

  1. Función string_replace (https://github.com/sisoputnfrba/so-commons-library/issues/59). Devuelve:
string_replace("hello", "ello", "ola") => "hola"
string_replace("hello", "l", "") => "heo"
string_replace("hello", "o", "o world!") => "hello world!"
string_replace("hello", "not a substring", "yay!") => "hello"
string_replace("hello", "", "x") => "hello"
string_replace("hello", NULL, "x") => error
string_replace(NULL, "a", "x") => error
RaniAgus commented 4 years ago

Yo lo veo bien y te agradezco, alto laburo!!!

Gracias!!

Lo que si te doy una recomendación Trata de no atacar muchas cosas en el mismo PR, tenes cambios de formatos, operaciones nuevas, y solucion de comportamiento. Entonces eso lleva a que haya que probar mas cosas para mergearlo y hace que tarde un poco mas.

Lo tendré en cuenta, quizás mi miedo era si podía llegar a haber algún problema al editar el mismo archivo desde distintas branches, y quería asegurarme de no tener ningún conflicto con eso.

Igual me fijé de tener los commits separados, no sé si habrá alguna forma de hacer distintos PRs... :thinking:

RaniAgus commented 4 years ago

@gastonprieto @matiasgarciaisaia @iago64 Preparé un commit con una función string_n_append para usar en string_replace, y arreglando un par de typos míos que encontré (entre ellos el tema de los tabs). ¿Les parece bien si lo agrego en este PR?

iago64 commented 3 years ago

@RaniAgus Perdon que no hice los merge, estuve tapado de quilombos de laburo, esta semana voy a ponerme a ver los cambios que propusiste a las commons y si esta todo en orden le damos para adelante 👍

RaniAgus commented 3 years ago

@RaniAgus Perdon que no hice los merge, estuve tapado de quilombos de laburo, esta semana voy a ponerme a ver los cambios que propusiste a las commons y si esta todo en orden le damos para adelante +1

Tranqui! Igual encontré un par de typos míos en las descripciones, también pensaba agregar las correcciones que me dijo Gastón, lo voy a pushear así queda en este PR.