[英]Printf format specifiers
我一直在嘗試將printf
的格式拼湊成一種線性格式。 以下是對可能的printf
格式的正確理解嗎?
% <justification: [-]?> <sign: [ +]?> <alternate: [#]?>
<padding: [0? num]?> <precision: [.num]?> <modifier: [h|hh|l|ll|L|z|t|j]?>
<format: [c|d(i)|e(E)|f|o|p|x(X)|u|s|g(G)]>
上面的順序和含義是否正確? 幾個例子是:
printf(" %-10.3s %-+20ld", "Hello!", 14L);
以下是對可能的 printf 格式的正確理解嗎?
“通常”是的,但例如你“不能”做%jg
或喜歡%0#p
。
還有%n
。
“精度”和“填充”都可以是星號,如%*s
或%.*s
(但您可以將num
定義為([0-9]+|\*)
...)。
也.
可選地后跟一個數字。 所以它更像是<precision: [. num? ]>
<precision: [. num? ]>
<precision: [. num? ]>
- 如果只有.
指定,精度為零。
是訂單
- +#0
的順序無關緊要,您可以重復它們,因此您可以%-+020d
和%+0-+++000----20d
具有相同的含義(並且0
與-
一起使用時會被忽略,所以也有極端情況)。
上面的意思正確嗎?
上面沒有解釋。 -
不是“理由”(字面意思是一個詞?),它是一個標志,使 output在字段內保持合理。 含義也取決於上下文 - 浮點數的“精度”可能可以理解為逗號后的位數,但“字符串的精度”聽起來很奇怪。 但一般來說,是的。
您的規范過於嚴格:
+
、 -
、 #
、 0
和空格可以按任何順序出現,但有些組合的意義較小,例如%+s
。*
a
和A
以產生十六進制浮點表示F
是可用的,並且與f
不同。%%
和%n
也應該被識別。 這是一個匹配所有有效printf
轉換規范的正則表達式,但不會檢測到無效組合:
%[ +-#0]*{[*]|[1-9][0-9]*}?(.{[*]|[0-9]*}?)?{h|hh|l|ll|L|z|t|j}?[%naAcdieEfFopxXusgG]
您可以對其進行改進以拒絕%%
的任何標志並限制其他情況,但將其表示為正則表達式將變得相當復雜。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.