cstring — как разделить строку C ++, чтобы получить всю строку по отдельности и некоторые ее части / символы

У меня вопрос, как я могу разбить строку в C ++? Например, у меня есть

string str = "[ (a*b) + {(c-d)/f} ]"
  1. Нужно получить все выражение индивидуально, как [, (А, *, Ь, ……
  2. И я хочу получить скобки только как [, (,), {, (,)},] в правильном положении

Как я могу сделать это несколькими простыми способами

1

Решение

Это называется лексический анализ (получение токенов из некоторой последовательности или потока символов) и должен сопровождаться разбор. Прочитайте, например, первая половина Книга Дракона.

Может быть Разбор LL тебе достаточно ….

Есть много инструментов для этого, смотрите этот вопрос (Я бы предложил ANTLR). Вы, вероятно, должны построить некоторые абстрактное синтаксическое дерево в какой-то момент.

Но это может не стоить усилий. Рассматривали ли вы встраивание некоторых скриптовый язык в вашем приложении, например Lua (увидеть этот а также этот…), или же гну хитрость, питон, так далее…

3

Другие решения

Вот способ, которым я должен сделать это,

string expression = "[ (a*b) + {(c-d)/f} ]" ;
string token ;

// appending an extra character that i'm sure will never occur in my expression
// and will be used for splitting here

expression.append("~") ;
istringstream iss(expression);
getline(iss, token, '~');

for(int i = 0 ; i < token.length() ; i++ ) {
if(token[i] != ' ' ) {
cout<<token[i] << ",";
}
}

Выход будет: [, (А, *, Ь,), +, {, (, с, -, д,), /, е,},],

1

По вопросам рекламы [email protected]