Я пытаюсь найти способ упростить примеры сравнения логических. В настоящее время их всего три (как показано ниже), но я собираюсь добавить 4-й вариант, и это становится очень утомительным.Как упростить логические сравнения на C++
bracketFirstIndex = message.indexOf('[');
mentionFirstIndex = message.indexOf('@');
urlFirstIndex = message.indexOf(urlStarter);
bool startsWithBracket = (bracketFirstIndex != -1);
bool startsWithAtSymbol = (mentionFirstIndex != -1);
bool startsWithUrl = (urlFirstIndex != -1);
if (!startsWithBracket)
{
if (!startsWithAtSymbol)
{
if (!startsWithUrl)
{
// No brackets, mentions, or urls. Send message as normal
cursor.insertText(message);
break;
}
else
{
// There's a URL, lets begin!
index = urlFirstIndex;
}
}
else
{
if (!startsWithUrl)
{
// There's an @ symbol, lets begin!
index = mentionFirstIndex;
}
else
{
// There's both an @ symbol and URL, pick the first one... lets begin!
index = std::min(urlFirstIndex, mentionFirstIndex);
}
}
}
else
{
if (!startsWithAtSymbol)
{
// There's a [, look down!
index = bracketFirstIndex;
}
else
{
// There's both a [ and @, pick the first one... look down!
index = std::min(bracketFirstIndex, mentionFirstIndex);
}
if (startsWithUrl)
{
// If there's a URL, pick the first one... then lets begin!
// Otherwise, just "lets begin!"
index = std::min(index, urlFirstIndex);
}
}
Есть ли лучше/более простой способ сравнить несколько логических значений, или я застрял в этом формате, и я просто должен пытаться втиснуть в 4-е варианта в соответствующих местах?
Похоже, что вы разбираете текст ... вы могли бы упростить это с помощью регулярного выражения или с помощью синтаксического анализатора. –
@MichaelAaronSafyan Можете ли вы подробнее рассказать о плане REGEX/синтаксическом анализаторе (я никогда не слышал об этой формулировке). – ZeldaZach
@ZeldaZach Можете ли вы рассказать нам, что вы пытаетесь разобрать? Кажется, это своего рода электронная почта или URL-адрес, но я не помню '[' участие в любом из них. Если вы можете уточнить свою проблему, мы сможем помочь с регулярным выражением. – Havenard