2016-08-14 65 views
-1

(這是一個非常基本的問題,但我似乎無法找到答案,因爲它涉及||,這是一個問題的搜索詞。)賦值爲零的簡寫形式,如c = str [i] || 「X」

由於字符可以被解釋爲布爾的條件是這樣的:

if (str[i]) ... 
if (c) ... 

其中「\ 0」被認爲是falsey和任何其它字符是truthy,我期待這個工作過:

char c = str[i] || 'x'; 

但它的總是給出1的值。在這個C中有簡單的速記嗎?我已經習慣了JavaScript,並且我覺得它很簡潔明瞭。

+1

使用三元運算符。 – Cristy

+1

關於最短的時間你會得到'char c = str [i]? str [i]:'x';'。 –

+0

@OliverCharlesworth我一直希望避免重複str [i],但我認爲開銷只是視覺上的,因此並不重要。 – m69

回答

1

你應該處理它像任何其他抽象,併爲它編寫一個函數:

char non_zero_or_default(const char c, const char d) 
{ 
    return c ? c : d; 
} 

然後用它作爲:

char c = non_zero_or_default(str[i++], 'x'); 

如果你擔心開銷可以inline它。

2

三元運算符是你在找什麼:

char c = str[i] ? str[i] : 'x'; 

Exaplanation:如果str[i]是truthy,分配的str[i]值變量c,其他情況下分配信'x'

+0

謝謝;任何想法如何處理'c = str [i ++] || 「x''? – m69

+0

我假設它的工作方式與PHP相似,其中'x'將被視爲真值,所以'[whatever]或者true - > true'。這就是爲什麼你得到'1'(C爲真)。 –

+0

我的意思是如何處理索引增量; 'char c = str [i ++]? str [i]:'x''和'char c = str [i]?str [i ++]:'x'與'c = str [i ++] ||不同「x''。 (但我想這是另一個問題。) – m69