Извлечение случайно выбранной строки из основной строки: MATLAB - PullRequest
0 голосов
/ 02 июня 2018

Строки, с которыми я работаю, похожи на написанные ниже:

<strong>String_1</strong>=<strong>'</strong>{2,2,1,1,{1,1,2,2,{1,2,{1,1,1,1,1}},2,2},{1,2,{1,2,2,2,2,2},2},{1,1},2,2,2,2,1,1,1,1,1}<strong>'</strong>;

Сначала я должен случайно выбрать одно из чисел в строке.После этого мне нужно извлечь строки из выбранного числа в первую <strong>}</strong> и создать еще одну строку с ним (см. Рисунок A ).Обратите внимание, мы перемещаемся только с влево на правую сторону.

Example A

Однако , если есть <strong>n</strong> открывающихся скобок внутриВыбранное число, мы должны пропустить <strong>n</strong> закрывающую скобку , чтобы добраться до искомой закрывающей скобки, как показано на рисунке B .

Example B enter image description here

Пожалуйста, дайте мне знать, если у вас есть какие-либо комментарии или предложения.Спасибо.

1 Ответ

0 голосов
/ 02 июня 2018

Сначала найдите позиции 1 и 2, чтобы получить случайную позицию.

inds = find(String_1 == '1' | String_1 == '2');
random_number_pos = inds(randi(length(inds)));

Теперь мы можем использовать концепцию стека, чтобы найти первое }, которое не открыто.

parentheses_opened = 0;
start_ind = random_number_pos + 2; end_ind = 0;
for ind = (random_number_pos + 2):length(String_1)
    if(String_1(ind) == '}' && parentheses_opened == 0)
        end_ind = ind - 1;
        break;
    elseif(String_1(ind) == '{')
        parentheses_opened = parentheses_opened + 1;
    elseif(String_1(ind) == '}')
        parentheses_opened = parentheses_opened - 1;
    end
end

String_2 = String_1(start_ind:end_ind);
String_1((start_ind - 1):(end_ind + 1)) = [];
...