簡體   English   中英

Printf 格式說明符

[英]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
  • 寬度和精度可以指定為*
  • 引入aA以產生十六進制浮點表示
  • 對於 NaN 和無窮大, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM