好吧,我有一個if語句,在這個句子中我多次比較了一個具體的值。我敢打賭,有一個較短的方式做到這一點:如何正確縮短C++中的if語句?
if(letter == "%" || letter == "+" || letter == "-" || letter == "!")
我試着寫它:
if(letter == "%" || "+" || "-" || "!")
但它的工作原理不正確。
好吧,我有一個if語句,在這個句子中我多次比較了一個具體的值。我敢打賭,有一個較短的方式做到這一點:如何正確縮短C++中的if語句?
if(letter == "%" || letter == "+" || letter == "-" || letter == "!")
我試着寫它:
if(letter == "%" || "+" || "-" || "!")
但它的工作原理不正確。
這是因爲短,因爲它可以。你可以儘管重寫它,從加速一些幫助它可能是
if(boost::is_any_of("%+-!")(letter))
char op[4] = { '%', '+', '-', '!' };
char * opEnd(op + 4);
if (opEnd != find(op, opEnd, letter))
或者:
if (string("%+-!").find(letter) != string::npos)
嘗試在-代替如果一個switch語句。這不是簡單的打字,但它確實允許您只寫一次「字母」。一些程序員喜歡switch語句的可視化佈局。請注意,切換僅適用於像char(不是std :: string)這樣的標量類型。
switch (letter)
{
case '%':
case '+':
case '-':
case '!':
// if letter is %,+,-,!
// code goes here for matching letter
break;
default:
// else do something different
// code goes here for letter that doesn't match
}
有關類似示例,請參閱頁面底部的http://www.cplusplus.com/doc/tutorial/control/。
問題是||
運算符的任何一方都不知道對方。他們是兩個完全獨立的表達。因此"+"
等方面始終是TRUE(想想如果你只是寫if ("+")
會發生什麼 - 它衰變到一個指針,它是非NULL
)
有時候,我發現這是使用清潔劑來std::find
表達這樣的問題,對迭代:
#include <iostream>
#include <algorithm>
void test(const char letter) {
static const char c[] = {'%', '+', '-', '!'};
static const char *begin=c, *end=&c[sizeof(c)/sizeof(*c)];
if (std::find(begin, end, letter) != end) {
std::cout << "Matched " << letter << std::endl;
}
}
int main() {
test('a');
test('%');
test('!');
}
我想最終的結果是輸入儘可能少,並試圖讓你的代碼快速通過使用熟悉的東西,如英語理解。
你的代碼讀起來像'我的字母等於這個和這個,這個和這個'。它可能有點長,但很快理解。
不幸的是,C++編譯器並不真正'是我的字母等於這些'。對我們大多數人來說,這可能是英語,但對編譯器來說不是很好:)
作爲一名程序員,您有能力隱藏編譯器讀寫缺陷,讓您的代碼易於理解並輸入更少。
if(letterIsOneOfThese(letter, "%+-!"))
{
// do something
}
bool letterIsOneOfThese(const char letter, const char* letterList)
{
int len = strlen(letterList);
while(len--)
{
if(letterList[len] == letter)
{
return true;
}
}
return false;
}
如果你比較字符,它應該是''%''而不是''%'',後者是一個字符串文字,應該與'strcmp()'進行比較。 –
'strcmp()'在C++中? – Flexo