Для начала просто выделите достаточно памяти для target
, так как вам нужно хранить всю исходную строку s
, потому что вы действительно не представляете, сколько места вам понадобится. Не забудьте добавить один для символа конца строки.
Затем измените patternA
и patternB
с char *
на char
, чтобы вы могли сравнить их с отдельными символами в s
.
Затем вам нужно перебрать исходную строку, отслеживая, находитесь ли вы в скобках или нет. Так как вам нужно поддерживать вложенные скобки, я бы использовал счетчик того, насколько глубоко вы внутри скобок:
int main()
{
const char *s = "text(lorem(ipsum)abcd)pieceoftext";
const char patternA = '(';
const char patternB = ')';
char *target;
int targetIndex = 0;
int parenDepth = 0;
target = malloc(strlen(s) + 1);
// check for malloc() error
for (int sourceIndex = 0; sourceIndex < strlen(s); sourceIndex++) {
if (s[sourceIndex] == patternA) {
// we are going deeper into parens, add to level, then ignore the char
parenDepth++;
continue;
}
if (s[sourceIndex] == patternB) {
// we are coming out of the parens, lower our level, ignore the parens char
parenDepth--;
continue;
}
if (parenDepth == 0) {
// if depth is 0, then we are not inside parens, so copy the char to target
target[targetIndex++] = s[sourceIndex];
}
}
// add end-of-string
target[targetIndex] = '\0';
printf("Answer: %s\n", target);
return 0;
}