-
Notifications
You must be signed in to change notification settings - Fork 0
/
questao3_particionar_strings.c
54 lines (53 loc) · 1.98 KB
/
questao3_particionar_strings.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
//
// Created by erick on 09/07/2019.
//
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
/* String to SubString Function*/
char** s2ss(char *str){
int count_barras = 0;
//Verifico o número de barras na string original.
for (int i = 0; i < strlen(str); i++){
if(str[i] == '/'){
count_barras++;
}
}
//Crio ponteiros para ponteiros que serão as palavras recortadas.
char **new_str = calloc(count_barras-1,sizeof(char*));
//Variáveis que auxiliam no controle das posições da primeira e segunda barras que envolvem uma substring.
int pos1 = -1, pos2 = -1;
//Controla em qual palavra estamos.
int count_pal_atual = 0;
for(int i = 0; i < strlen(str); i++){
//Capturo a posição da primeira e segunda barra.
if (str[i] == '/' && pos1 == -1){
pos1 = i;
} else if (str[i] == '/' && pos1 != -1){
pos2 = i;
}
//Se as duas são diferentes de -1 então achamos uma substring
if(pos1 != -1 && pos2 != -1){
//Calculo quantos caracteres tem essa substring
size_t len_substr = (int)pos2-((int)pos1)-1;
//Aloco dinamicamente espaço em memória para ela.
char *newstr = malloc((len_substr)* sizeof(char));
//Copio neste espaço cada caractere sem destruir a string original
for(int j = 0; j < len_substr; j++){
newstr[j] = str[pos1+j+1];
}
//Defino o fim da substring
newstr[len_substr] = '\0';
//Coloco no vetor de retorno na posição correspondente.
new_str[count_pal_atual] = newstr;
count_pal_atual++;
//atualizo as posições auxiliares trazendo a posição 1 para a antiga posição 2 e anulo a posição 2 para
//que ela possa ser atualizada novamente
pos1 = pos2;
pos2 = -1;
}
}
//Retorno do Ponteiro mestre.
return new_str;
}