自学内容网 自学内容网

格式串详解

不同语言格式串五花八门,究其本质,无非是如何处理格式串和变量对应关系。

示例: 输出右对齐宽度为8个字符整形数据

  • C/ObjC/Java/Ruby/Go
    • %8d
      直接依赖库函数解析格式串,区分格式符前缀%、对齐长度、对齐方向、类型等,做填充、对齐操作。

  • C++
    • std::setw(8)和std::right
      C++ 输出流对象提供方法,设置对齐长度和对齐方向。

  • C#
    • "{0,8:D}"
      和C语言风格很像,不过用新的展示格式,冒号分隔。

  • Python
    • {num:8d}
      最接近C语言风格。

  • Rust
    • {:8}

  • VB.NET
    • String.Format("{0,8}", num)

格式串语法

  • C语言: %[flag][min width][.precision][length]format
    • min width/precision/length在不同语境部分可选或要忽略

  • Java: %[arguments_index$][flags][field width][.precision]format

浮点数小数位

如下示例保留两位小数:

  • 仓颉:float_var.format(".2")

  • C/ObjC/C++: "%.2f"

格式串大小写

  • C语言%g/%e代表浮点数,大写%G和%E功能一样,但表达指数的E用大写,而非前面的小写。

看起来另类的格式串

  • C语言“%8%”会输出一个百分号%, 且左侧有7个空格。

  • C语言%n代表已经输出的字节个数。
    printf("hello我%n\n", &b); // 假设字符串UTF-8编码,b == 8

格式串补零

  • C语言整数格式符%d/%o/%x/%u也可指定精度代表最少位数,最终输出位数不足,会补0.
    printf("%.2d/%.2d/%.4d\n", 2, 12, 12345); // 02/12/12345

  • %02d和%.2d一样可以补0.

宽度和精度可被指定?

  • C语言可以动态指定格式串宽度和精度:
    printf("%.*d\n", 2, 1); // 输出宽度是2,输出01,宽度2也可以用变量传入

废弃的格式符

  • C语言早期,%D指代%ld, %O指代%lo, %X指代%lx, 但后来被发现其实%X也可以指代十六进制大写形式,后来这三个大写格式符被抛弃了。


微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

欢迎关注。助您在编程路上越走越好!


原文地址:https://blog.csdn.net/cxsjabcabc/article/details/142530906

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!