Извлечение определенного текстового шаблона из строки

0

У меня есть строка следующим образом:

"0/41/9/71.94 ПК: 0x82cc (добавить)"

Желаемый результат - это текст между скобками()

Ex: output = add,

для указанной выше строки

Как это делается с помощью sscanf? Есть ли лучший способ сделать это в C++?

  • 1
    опишите общий метод, который работает не только на этом конкретном примере, но и на всех возможных входах - и я не говорю о коде. просто английское описание.
  • 0
    Так что же это за «конкретный текстовый шаблон»?
Показать ещё 1 комментарий
Теги:
string
scanf

2 ответа

0
Лучший ответ

string с string операциями:

std::string text = "0/41/9/71.94 PC:0x82cc (add)";

auto pos = text.find('(') + 1;
auto opcode = text.substr(pos, text.find(')', pos) - pos);

Демо.

С помощью sscanf он будет выглядеть примерно так:

std::string opcode(5, '\0'); // Some suitable maximum size

sscanf(text.c_str(), "%*[^(](%[^)]", &opcode[0]);

Демо.

  • 0
    Это хорошо. Но ответ с sscanf будет лучше из-за моих ограничений симулятора
  • 0
    @Insanelycurious Добавлен sscanf решение.
0

Его очень легко, вы должны попробовать себя, подумать, как искать в массиве, а затем подумать, могу ли я сравнить содержимое массива или нет, тогда все будет возможно, так как программисту нужно создавать идеи, однако, если я попросили написать такую программу, я бы сделал это следующим образом:

int i=0, p=0;
char string="0/41/9/71.94 PC:0x82cc (add)", nstr[100];
while(string[i]!='\0')
{
while(string[i]!='(')
i++;
if (string[i]=='(')
{
i++;
goto end;
}
end:
while (string[i]!=')' || string[i]!='\0')
{
nstr[p]=string[i];
p++;
i++;
}
nstr[p]='\0';
cout<<Output = "<<nstr<<"\n";

Я знаю, что это очень долго, но это даст вам более глубокое понимание синтаксического анализа или сплит строки, надеюсь, что я помогу вам, спасибо...

  • 0
    Мне известен общий метод, но у меня есть ограничения по размеру кода в симуляторе, поэтому я искал конкретные методы.
  • 0
    Хорошо, братан, но у меня нет гораздо меньшего кода, чем этот, извини, брат, удачи ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню