我試圖找到一種方法來簡化布爾值的比較案例。目前,只有三個(如下所示),但我即將添加第四個選項,這變得非常乏味。如何簡化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);
}
}
有比較幾種布爾值更好/更簡單的方法,還是我停留在這個格式,我應該嘗試在適當位置的第四選項擠?
看起來你正在解析一些文本......你可能會用正則表達式或使用解析器生成器來簡化它。 –
@MichaelAaronSafyan你可以詳細闡述一下REGEX計劃/解析器生成器(我從來沒有聽說過這個措辭)。 – ZeldaZach
@ZeldaZach你能告訴我們你想分析什麼嗎?這似乎是某種電子郵件或URL,但我不記得'['參與任何這些。如果你能具體談談您的問題,我們也許能夠幫助正則表達式。 – Havenard