(delphi11最新学习资料) Object Pascal 学习笔记---第6章第3节(更多字符串RTL函数与格式化字符串)

6.3.5 更多字符串RTL函数

​ 借鉴其他编程语言中常用的操作名称来实现字符串辅助工具的决定所产生的一个影响是,这些操作的名称往往与传统的 Object Pascal 函数名称不同(这些函数今天仍可作为全局函数使用)。

​ 下表列出了一些不匹配的函数名称:

全局字符串类型辅助
PosIndexOf
IntToStrParse
StrToIntToInteger
CharsOfCreate
StringReplaceReplace

这只是字符串RTL中一些常用函数中名称不匹配的函数,而许多其他函数仍然使用与UpperCase或QuotedString相同的名称。System.SysUtils单元有更多函数,而System.StrUtils单元还有许多专注于字符串操作的函数,它们不是字符串辅助的一部分。

System.StrUtils单元中一些值得注意的函数包括:

  • ResemblesText,实现Soundex算法(一种通过单词的发音而非实际拼写来识别单词的算法);
  • DupeString,返回给定字符串请求的副本数;
  • IfThen,如果条件为真,则返回第一个字符串,否则将返回第二个字符串(我在本章前面的代码片段中使用了该函数);
  • ReverseString,返回具有相反字符序列的字符串。
6.3.6 格式化字符串

​ 使用加号 (+) 运算符连接字符串,并使用某些转换函数,确实可以将各种数据类型的现有值构建成复杂的字符串,但要将数字、货币值和其他字符串格式化为最终字符串,还有另一种更强大的方法。复杂字符串格式化可以通过调用 Format 函数来实现,这是一种非常传统但仍极为常见的机制,不仅在 Object Pascal 中如此,在大多数编程语言中也是如此。

历史:打印格式字符串或 printf 函数系列可追溯到早期的编程语言,如 FORTRAN 66、PL/1 和 ALGOL 68。目前仍在使用的格式字符串结构(Object Pascal 使用的)与 C 语言的 printf 函数非常接近。有关历史概述,请参阅 en.wikipedia.org/wiki/Printf_format_string。

​ Format函数的参数是一个包含基本文本和一些占位符(用 % 符号标记)的字符串,以及一个数值数组,通常每个占位符对应一个数值数组。例如,如果要将两个数字格式化为一个字符串,可以这样写:

Format('First %d, Second %d', [N1, N2]);

​ 其中 N1 和 N2 是两个整数值。第一个占位符由第一个值代替,第二个占位符由第二个值代替,依此类推。如果占位符的输出类型(用 % 符号后面的字母表示)与相应参数的类型不匹配,运行时就会出错。同样,没有传递足够的参数也会导致运行时错误。没有编译时类型检查是使用 Format 函数的最大缺点。

​ Format 函数使用开放式数组形参(如第 5 章所述,该参数可以有任意数量的值或任意数据类型)。除了使用 %d 之外,您还可以使用该函数定义的许多其他占位符,下表简要列出了这些占位符。这些占位符提供了给定数据类型的默认输出。不过,您也可以使用其他格式指定符来更改默认输出。例如,宽度指示符决定输出中的固定字符数;精度指示符则表示小数位数。例如:

Format('%8d', [N1]);

​ 将数字 N1 转换为 8 个字符的字符串,文本右对齐(使用减号 (-) 指定左对齐),并填充空白。以下是各种数据类型的格式占位符列表:

  • d(十进制):将相应的整数值转换为十进制数字的字符串。
  • x(十六进制):将相应的整数值转换为十六进制数字的字符串。
  • p(指针):将相应的指针值转换为用十六进制数字表示的字符串。
  • s(字符串):将相应的字符串、字符或PChar(指向字符数组的指针)值复制到输出字符串。
  • e(指数):将相应的浮点值基于科学计数法转换为字符串。
  • f(浮点数):将相应的浮点值基于浮点数表示法转换为字符串。
  • g(通用):使用浮点或指数符号将相应的浮点数值转换成尽可能短的十进制字符串。。
  • n(数字):将相应的浮点值转换为使用千位分隔符的浮点字符串,通常由区域设置定义。
  • m(货币):将相应的浮点值转换为表示货币金额的字符串。转换通常基于区域设置。

​ 查看这些转换示例的最佳方法是自己尝试使用格式字符串。为了简化操作,我编写了 FormatString 示例,让用户为几个预定义的整数值提供格式化字符串。

​ 程序的窗体在按钮上方有一个编辑框,最初放置一个简单的预定义格式化字符串作为占位符(‘%d - %d - %d’)。程序的第一个按钮可让您在编辑框中显示一个更复杂的格式字符串示例(代码对格式字符串 "Value %d,Align %4d,Fill %4.4d "的编辑文本进行了简单赋值)。通过第二个按钮,您可以使用以下代码将格式字符串应用到预定义值中,使用以下代码:

var
   StrFmt: string;
   N1, N2, N3: Integer;
begin
   StrFmt := Edit1.Text;
   N1 := 8;
   N2 := 16;
   N3 := 256;
   Show(Format('Format string: %s', [StrFmt]));
   Show(Format('Input data: [%d, %d, %d]', [N1, N2, N3]));
   Show(Format('Output: %s', [Format(StrFmt, [N1, N2, N3])]));
   Show(''); // 空行
end;

​ 如果先用最初的格式字符串显示输出,然后再用示例格式字符串显示输出(也就是说,先按第二个按钮,再按第一个按钮,然后再按第二个按钮),就会得到类似下面的输出结果:

Format string: %d - %d - %d
Input data: [8, 16, 256]
Output: 8 - 16 - 256

Format string: Value %d, Align %4d, Fill %4.4d
Input data: [8, 16, 256]
Output: Value 8, Align 16, Fill 0256

然而,该程序的目的是让您编辑格式字符串并进行实验,以查看各种可用的格式选项的效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/426489.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用 Haproxy 搭建Web群集

Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多,如LVS 和Nginx。相比较而言,LVS.牲能最好.但是搭建相对复杂:Nginx的upstream模块支持群集功能.但是对群集节点健康检查功能不强,性能没有…

jupyter 一键快捷启动方法研究

1.效果 首先打开dat 文件,同意赋予管理员 输入序号1 成功启动 2.Bat代码 %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&e…

【网站项目】123网上书城系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

Matlab 多项式插值(曲线拟合)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 由于对曲线拟合有些兴趣,这里就找了一些资料从最基本的方法来看一下曲线拟合的效果: 二、实现代码 % **********

后端开发技术面试指南

工作10多年,每年都会帮组里面试一些新同学校招社招的都有,下面我就从一个面试官的视角来给大家拆解一下如何淡然应对后端开发技术面试。 1.一面多为电话面试 (1)问七问八 ①简历要注重内容,形式上不丑没有错别字即可。之前收到过一个工作5…

代码随想录算法训练营第七天

● 自己看到题目的第一想法 第454题.四数相加II 方法&#xff1a; 方法一&#xff1a; 暴力法 思路&#xff1a; 注意&#xff1a; 代码&#xff1a; class Solution { public:int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<i…

SpringBlade CVE-2022-27360 export-user SQL 注入漏洞分析

漏洞描述 SpringBlade是一个基于Spring Cloud和Spring Boot的开发框架&#xff0c;旨在简化和加速微服务架构的开发过程。它提供了一系列开箱即用的功能和组件&#xff0c;帮助开发人员快速构建高效可靠的微服务应用。该产品/api/blade-user/export-user接口存在SQL注入。 漏…

探索Hadoop的三种运行模式:单机模式、伪分布式模式和完全分布式模式

目录 前言一、 单机模式二、 伪分布式模式三、 完全分布式模式&#xff08;重点&#xff09;3.1 准备工作3.2 配置集群3.2.1 配置core-site.xml 文件3.2.2 配置hdfs-site.xml 文件3.2.3 配置yarn-site.xml 文件3.2.4 配置mapred-site.xml 文件 3.3 启动集群3.3.1 配置workers3.…

神经网络系列---卷积

文章目录 卷积神经网络卷积转置卷积 卷积核和反卷积的三种实现方式卷积的次数计算 卷积神经网络 在神经网络的卷积层中&#xff0c;向下取整&#xff08;Floor&#xff09;是一种常用的策略&#xff0c;特别是在处理输出尺寸不是整数的情况时。当你计算出卷积层输出的尺寸&…

【 10X summary report】怎么看?详细解读笔记

报告内容 在开始正式的分析之前&#xff0c;需要查看在对齐和计数过程中生成的任何总结统计信息。下图是由Cell Ranger工具创建的10X总结报告&#xff0c;在从10X scRNA-seq实验生成计数矩阵时会生成。 The left half of the report describes sequencing and mapping statist…

李沐动手学习深度学习——3.1练习

字写的有点丑不要介意 由于公式推导烦的要死&#xff0c;所以手写形式&#xff0c;欢迎进行讨论&#xff0c;因为我也不知道对错

2024最新AI系统ChatGPT网站源码, AI绘画系统

一、前言说明 R5Ai创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持GP…

lua调用C++函数

第一步搭建lua的环境. win10 lua环境搭建-CSDN博客 我使用的环境是win10vs2015lua54 先来个最简单的lua调用C函数, 无参数无返回值的 第一步:定义C函数. int CTest(lua_State* L) // 返回值是固定的int类型,返回0表示没有返回参数,返回1表示有一个返回参数 {std::cout &l…

模型部署 - BevFusion - (1) - 思路总结

模型部署实践 - BevFusion 思路总结一、网络结构 - 总结1.1、代码1.2、网络流程图1.3、模块大致梳理 二、Onnx 的导出 -总体思路分析三、优化思路总结 学习 BevFusion 的部署&#xff0c;看了很多的资料&#xff0c;这篇博客进行总结和记录自己的实践 思路总结 对于一个模型我…

自学高效备考2025年AMC8数学竞赛:2000-2024年AMC8真题解析

今天继续来随机看五道AMC8的真题和解析&#xff0c;根据实践经验&#xff0c;对于想了解或者加AMC8美国数学竞赛的孩子来说&#xff0c;吃透AMC8历年真题是备考最科学、最有效的方法之一。下面的五道题目如果你能在8分钟内做对&#xff08;主要结果对&#xff0c;无需过程&…

【C++精简版回顾】18.文件操作

1.文件操作头文件 2.操作文件所用到的函数 1.文件io 1.头文件 #include<fstream> 2.打开文件 &#xff08;1&#xff09;函数名 文件对象.open &#xff08;2&#xff09;函数参数 /* ios::out 可读 ios::in 可…

Vue前端+快速入门【详解】

目录 1.Vue概述 2. 快速入门 3. Vue指令 4.表格信息案例 5. 生命周期 1.Vue概述 1.MVVM思想 原始HTMLCSSJavaScript开发存在的问题&#xff1a;操作麻烦&#xff0c;耦合性强 为了实现html标签与数据的解耦&#xff0c;前端开发中提供了MVVM思想&#xff1a;即Model-Vi…

Spring框架精髓:带你手写IoC

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

巧用二进制实现俄罗斯方块小游戏

效果预览 思想 首先建立两个数组board、tetris用来存储当前已经堆积在棋盘的方块与正在下落的方块。 这两个是一维数组当需要在页面画棋盘时就对其每一项转成二进制&#xff08;看计算属性tetrisBoard&#xff09;&#xff0c;其中1&#xff08;红色&#xff09;0&#xff08;…

python celery beat实现定时任务

在Celery在python中的应用除了实现异步任务&#xff08;async task)外也可以执行定时任务(beat) 1.Celery定时任务是什么&#xff1f; Celery默认任务单元由任务生产者触发,但有时可能需要其自动触发, 而beat进程正是负责此类任务,能够自动触发定时/周期性任务. 只需要在配置…
最新文章