Created
July 10, 2020 22:11
-
-
Save raphaelnapi/ed0c29e049ee6dd0d36d687b77b9ee0a to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Header para manipulação de Strings em C | |
//por Raphael Pina Viana | |
//funções: | |
//char* upper(char* str) | |
//char* lower(char* str) | |
//int mestoi(char* mes) | |
//char* itomes(int i) | |
//char* replace(char* str, char* oldc, char* newc) | |
//int splitcount(char* string, char* separator) | |
//char* _split(char* string, char* separator, int pos) | |
//char* removeFirstSplit(char* string, char* separator) | |
//char* mid(char* str, int ipos, int length) | |
//char* midpos(char* str, int ipos, int fpos) | |
//int instr(int ipos, char* str1, char* str2) | |
//int fimstr(int ipos, char* str1, char* str2) | |
char* upper(char* str){ | |
static char* ret; | |
ret = realloc(ret, strlen(str) + 1); | |
int i; | |
memset(ret, 0, strlen(str) + 1); | |
for(i = 0; i < strlen(str); i ++) | |
*(ret + i) = toupper(*(str + i)); | |
return ret; | |
} | |
char* lower(char* str){ | |
static char* ret; | |
ret = realloc(ret, strlen(str) + 1); | |
int i; | |
memset(ret, 0, strlen(str) + 1); | |
for(i = 0; i < strlen(str); i ++) | |
*(ret + i) = tolower(*(str + i)); | |
return ret; | |
} | |
int mestoi(char* mes){ | |
if(strcmp(lower(mes), "janeiro") == 0) | |
return 1; | |
else if(strcmp(lower(mes), "fevereiro") == 0) | |
return 2; | |
else if(strcmp(lower(mes), "março") == 0) | |
return 3; | |
else if(strcmp(lower(mes), "abril") == 0) | |
return 4; | |
else if(strcmp(lower(mes), "maio") == 0) | |
return 5; | |
else if(strcmp(lower(mes), "junho") == 0) | |
return 6; | |
else if(strcmp(lower(mes), "julho") == 0) | |
return 7; | |
else if(strcmp(lower(mes), "agosto") == 0) | |
return 8; | |
else if(strcmp(lower(mes), "setembro") == 0) | |
return 9; | |
else if(strcmp(lower(mes), "outubro") == 0) | |
return 10; | |
else if(strcmp(lower(mes), "novembro") == 0) | |
return 11; | |
else if(strcmp(lower(mes), "dezembro") == 0) | |
return 12; | |
} | |
char* itomes(int i){ | |
static char* mes; | |
mes = realloc(mes, 16); | |
memset(mes, 0, 16); | |
switch(i){ | |
case 1: | |
strcpy(mes, "janeiro"); | |
break; | |
case 2: | |
strcpy(mes, "fevereiro"); | |
break; | |
case 3: | |
strcpy(mes, "março"); | |
break; | |
case 4: | |
strcpy(mes, "abril"); | |
break; | |
case 5: | |
strcpy(mes, "maio"); | |
break; | |
case 6: | |
strcpy(mes, "junho"); | |
break; | |
case 7: | |
strcpy(mes, "julho"); | |
break; | |
case 8: | |
strcpy(mes, "agosto"); | |
break; | |
case 9: | |
strcpy(mes, "setembro"); | |
break; | |
case 10: | |
strcpy(mes, "outubro"); | |
break; | |
case 11: | |
strcpy(mes, "novembro"); | |
break; | |
case 12: | |
strcpy(mes, "dezembro"); | |
break; | |
} | |
return mes; | |
} | |
char* replace(char* str, char* oldc, char* newc){ | |
int i; //loop frase | |
int z; //loop para comparar oldc inteiro | |
int offset; //diferença de caracteres para ret se newc for maior que oldc | |
static char* ret; | |
ret = realloc(ret, strlen(str) - strlen(oldc) + strlen(newc) + 1); | |
memset(ret, 0, strlen(str) - strlen(oldc) + strlen(newc) + 1); | |
offset = 0; | |
for(i = 0; i < strlen(str); i ++){ | |
for(z = 0; z < strlen(oldc); z ++){ | |
if(*(str + i + z) != *(oldc + z)) | |
break; | |
} | |
if(z == strlen(oldc)){ | |
strcat(ret, newc); | |
i += strlen(oldc) - 1; | |
offset += strlen(newc) - strlen(oldc); | |
} | |
else | |
*(ret + i + offset) = *(str + i); | |
} | |
*(ret + i + offset) = '\0'; | |
return ret; | |
} | |
int splitcount(char* string, char* separator){ | |
int i; | |
int z; | |
int bEncontrouSeparador = 0; | |
int count = 1; | |
for(i = 0; i < strlen(string); i ++){ | |
if(*(string + i) == *separator){ | |
for(z = 0; z < strlen(separator); z ++){ | |
if(*(string + i + z) == *(separator + z)) | |
bEncontrouSeparador = 1; | |
else{ | |
bEncontrouSeparador = 0; | |
break; | |
} | |
} | |
} | |
if(bEncontrouSeparador == 1){ | |
count ++; | |
i = i + strlen(separator) - 1; | |
bEncontrouSeparador = 0; | |
} | |
} | |
return count; | |
} | |
char* _split(char* string, char* separator, int pos){ | |
static char* ret; | |
int i; | |
int z; | |
int c = 0; | |
int currentpos = 0; | |
int bEncontrouSeparador = 0; | |
ret = realloc(ret, strlen(string) + 1); | |
//zera ret | |
for(i = 0; i < strlen(string) + 1; i ++) | |
*(ret + i) = '\0'; | |
for(i = 0; i < strlen(string); i ++){ | |
//Encontrou separador | |
if(*(string + i) == *separator){ | |
for(z = 0; z < strlen(separator); z ++){ | |
if(*(string + i + z) == *(separator + z)) | |
bEncontrouSeparador = 1; | |
else{ | |
bEncontrouSeparador = 0; | |
break; | |
} | |
} | |
} | |
if(currentpos == pos && bEncontrouSeparador == 0){ | |
*(ret + c) = *(string + i); | |
c ++; | |
} | |
if(bEncontrouSeparador == 1){ | |
currentpos ++; | |
i = i + strlen(separator) - 1; | |
bEncontrouSeparador = 0; | |
if(currentpos > pos) | |
break; | |
} | |
} | |
return ret; | |
} | |
char* removeFirstSplit(char* string, char* separator){ | |
static char* ret; | |
int i, z; | |
ret = realloc(ret, strlen(string) + 1); | |
//zera ret; | |
for(i = 0; i < strlen(string) + 1; i ++) | |
*(ret + i) = '\0'; | |
z = splitcount(string, separator); | |
for(i = 1; i < z; i ++){ | |
strcat(ret, _split(string, separator, i)); | |
if(i < z - 1) | |
strcat(ret, separator); | |
} | |
return ret; | |
} | |
char* mid(char* str, int ipos, int length){ | |
static char* ret; | |
int i; | |
ret = realloc(ret, 1024); | |
memset(ret, 0, 1024); | |
for(i = ipos; i < ipos + length; i ++){ | |
*(ret + i - ipos) = *(str + i); | |
} | |
return ret; | |
} | |
char* midpos(char* str, int ipos, int fpos){ | |
static char* ret; | |
int i; | |
ret = realloc(ret, 1024); | |
memset(ret, 0, 1024); | |
for(i = ipos; i <= fpos; i ++){ | |
*(ret + i - ipos) = *(str + i); | |
} | |
return ret; | |
} | |
int instr(int ipos, char* str1, char* str2){ | |
int i; //caracteres em str1 | |
int z; //caracteres em str2 | |
if(ipos >= strlen(str1)) //posição inicial nao pode ser maior que str1.length | |
return -2; | |
for(i = ipos; i < strlen(str1); i ++){ //LOOP em str1 | |
for(z = 0; z < strlen(str2); z ++){ //LOOP em str2 comparando cada caracter | |
if(*(str1 + i + z) != *(str2 + z)) //se caracter for diferente passa para proximo caracter de str1 | |
break; | |
} | |
if(z == strlen(str2)) //se z == str2.length então loop rodou até o final (todos os caracteres foram comparados e retornaram true) | |
return i; //retorna posição do primeiro caracter da sequencia de caracteres | |
} | |
return -1; //fim do loop sem encontrar str2 em str1 | |
} | |
int fimstr(int ipos, char* str1, char* str2){ | |
int i; //caracteres em str1 | |
int z; //caracteres em str2 | |
if(ipos >= strlen(str1)) //posição inicial nao pode ser maior que str1.length | |
return -2; | |
for(i = ipos; i < strlen(str1); i ++){ //LOOP em str1 | |
for(z = 0; z < strlen(str2); z ++){ //LOOP em str2 comparando cada caracter | |
if(*(str1 + i + z) != *(str2 + z)) //se caracter for diferente passa para proximo caracter de str1 | |
break; | |
} | |
//for parece incrementar +1 em i mesmo após o break; | |
if(z == strlen(str2)) //se z == str2.length então loop rodou até o final (todos os caracteres foram comparados e retornaram true) | |
return i + z; //retorna posição do primeiro caracter APÓS sequencia de caracteres | |
} | |
return -1; //fim do loop sem encontrar str2 em str1 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment