2016-08-14 2 views
-1

(Dies ist eine sehr einfache Frage, aber ich kann nicht scheinen, um eine Antwort zu finden, weil es || beinhaltet, die eine problematische Suchbegriffs ist.)Kürzel für Zuweisung bei Null, wie c = str [i] || ‚X‘

Da ein Zeichen als ein interpretiert werden kann boolean in einem bedingten wie folgt aus:

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

wo '\ 0' Falsey betrachtet und jedes andere Zeichen ist truthy, ich hatte erwartet, dies zu arbeiten:

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

aber es ist immer einen Wert von 1 geben. Gibt es dafür eine einfache Kurzschrift in C? Ich habe mich in JavaScript daran gewöhnt und finde es klar und prägnant.

+1

Verwenden Sie den ternären Operator. – Cristy

+1

Die kürzeste, die du bekommen wirst ist 'char c = str [i]? str [i]: 'x'; '. –

+0

@OliverCharlesworth Ich hatte gehofft zu vermeiden, str [i] zu wiederholen, aber ich denke, der Overhead ist nur visuell und daher unwichtig. – m69

Antwort

1

Sie sollten sie wie jede andere Abstraktion handhaben, und eine Funktion für sie schreiben:

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

dann als verwenden:

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

Sie können es inline, wenn Sie über Kopf besorgt sind, .

2

Der ternäre Operator ist, was Sie suchen:

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

Exaplanation: wenn str[i] truthy ist, weisen Wert von str[i] variable c, anderen Fall assign Brief 'x'.

+0

Danke; jede Idee, was mit 'c = str [i ++] || zu tun ist "x"? – m69

+0

Ich gehe davon aus, dass es wie in PHP funktioniert, wo ''x'' als truthy Wert behandelt wird, also' [was auch immer] ODER wahr -> wahr'. Deshalb bekommst du "1" (wahr in C). –

+0

Ich meinte, was mit dem Indexinkrement zu tun ist; beide Zeichen char c = str [i ++]? str [i]: 'x'' und 'char c = str [i]?str [i ++]: 'x'' macht etwas anderes als 'c = str [i ++] || "x". (Aber ich denke, das ist eine andere Frage.) – m69

Verwandte Themen