Delphi 中字符串的 CompareStr 和 '=' 之间的区别

2024-07-04

我只是想知道之间的区别CompareStr and =用于比较 Delphi 中的字符串。两者产生相同的结果。

if(str2[i] = str1[i]) then
  ShowMessage('Palindrome')

if(CompareStr(str2[i], str1[i]) = 0) then
  ShowMessage('Palindrome')

两者都显示消息回文。


Use CompareStr不是当您只想查看两个字符串是否相等时,而是当您想知道一个字符串相对于另一个字符串进行比较时。如果第一个参数首先出现,它将返回一个小于 0 的值(asciibetically),如果第一个参数所属,它将返回一个大于零的值after第二。

Without CompareStr,你可能有这样的代码:

if str1[i] = str2[i] then begin
  // They're equal
end else if str1[i] < str2[i] then begin
  // str1 comes first
end else begin
  // str2 comes first
end;

那比较str1 and str2两次。和CompareStr,您可以删除其中一个字符串比较并将其替换为更便宜的整数比较:

x := CompareStr(str1[i], str2[i]);
if x = 0 then begin
  // They're equal
end else if x < 0 then begin
  // str1 comes first
end else begin
  // str2 comes first
end;

正如格里的回答 https://stackoverflow.com/questions/6452400/difference-between-comparestr-and-for-strings-in-delphi/6453171#6453171解释说,该函数在排序函数中特别有用,特别是因为它与其他比较函数(例如CompareText and AnsiCompareStr。排序函数是一个模板法 http://en.wikipedia.org/wiki/Template_method_pattern,并且每个函数都作为比较strategy http://en.wikipedia.org/wiki/Strategy_pattern.

如果您只想测试相等性,请使用=运算符——更容易阅读。使用CompareStr当您需要它提供的额外功能时。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Delphi 中字符串的 CompareStr 和 '=' 之间的区别 的相关文章

  • 读取存储在注册表中的 GUID 值

    我尝试读取存储为的 GUID 值binaryDelphi 注册表中的值 当我用BintoHex读取它时 但结果是相反的 看来我必须交换字节 但我认为 BinToHex 可以做到 我参考了这个线程 但找不到正确的解决方案 如何在 Delphi
  • Writeln 能够支持 Unicode 吗?

    考虑这个程序 APPTYPE CONSOLE begin Writeln Z end 使用 Consolas 字体的控制台上的输出是 Z Windows 控制台非常有能力支持 Unicode 如该程序所示 APPTYPE CONSOLE u
  • 无法在 SAMSUNG GALAXY S7 EDGE 上调试

    为什么我无法在 RAD STUDIO 10 Seattle upd 1 中的 SAMSUNG GALAXY S7 EDGE ANDROID 6 0 1 上调试我的应用程序 当我调试时 设备上的应用程序启动 但 RAD STUDIO Delp
  • 安装软件包时出现无法加载软件包 %s 错误

    我正在 Delphi 2007 上进行测试 我的小组项目由 2 个包组成 包运行 bpl 它被标记为 仅运行时 并包含一个名为 uMyTestRun pas 的单元 其中定义了一个空的 TFrame 后代 unit uMyTestRun i
  • 如何改变TDateTimePicker的颜色?

    如何更改 a 的颜色TDateTimePicker A 日期和时间选择器可以有一种颜色 通常这是通过设置来完成的Color procedure TForm1 FormCreate Sender TObject begin DateTimeP
  • 将数据从 DLL 传递到应用程序时出现问题

    我对如何在我的场景中正确使用指针感到有点困惑 我有一个 DLL 其中包含一些嵌入式资源 我在此 DLL 中公开了一个函数 该函数将这些资源之一的二进制数据传递回其调用应用程序 在本例中 我嵌入了 JPG 图像文件 我的 DLL 确实将文件正
  • 如何取消注册我的应用程序的文件格式?

    在 Windows 10 中的 Delphi 10 4 2 win 32 VCL 应用程序中 我注册了 ICO我的图形应用程序的文件格式使用DSiWin32 DSiRegisterUserFileAssoc https github com
  • 尝试访问 Delphi 7 中的 Excel 表时的提供程序选择

    我正在尝试使用 TAdoConnection 组件从 Delphi 7 连接到 Excel 表 问题是当我选择 Microsoft Jet OLEDB 4 0 Extended Properties Excel 8 0 时 我有时会收到错误
  • 对角画笔样式给我黑色区域

    我想用以下代码在画布上绘制一个对角线十字 InFlateRect r 1 1 Canvas Brush Color clYellow Canvas Brush Style bsFDiagonal Canvas Pen Color clRed
  • Delphi应用程序中子菜单位置错误

    我的应用程序是用delphi 编写的 由于某种原因 主菜单的行为不再像昨天那样 我可能在不知情的情况下触及了某些属性 现在 当我单击带有子项的菜单项时 尽管箭头位于右侧 但子菜单始终向左打开 是什么原因以及如何恢复 正如问题评论中所揭示的那
  • 保留部分桌面

    如何使用 Delphi 保留桌面的一侧 像 Vista 侧边栏那样的东西 你想要的叫做应用程序桌面工具栏 http msdn microsoft com en us library bb776821 28VS 85 29 aspx 您必须使
  • Delphi TStringGrid多选,确定选定的行

    是否有办法确定当前在多选中选择了哪些行TStringGrid or a TCustomGrid对于这个问题 拥有房产将是理想的选择 我知道有gdSelected属性被设置在DrawCell event procedure DrawCell
  • 防止“组合有符号和无符号类型扩大了两个操作数”编译器警告

    此代码用于设置组件 会产生编译器警告 DCC Warning Unit1 pas 742 W1024 Combining signed and unsigned types widened both operands var iPrecis
  • 如何在.pot文件中排除DBGrid.Column.FieldName

    我用Delphi 6做了一个应用程序 之后 我提取了一个 pot 文件 其中包含所有要翻译的字符串 问题是有些字符串不需要翻译 如果翻译就会产生问题 其中之一是 TDBGrid Columns x FiedlName 我尝试将这些行放入 g
  • 检测 Citrix“应用程序模式”?

    请原谅我可能用错了这个 应用程序模式 的术语 我们的应用程序在启动过程中遇到问题 直到主窗口打开后才显示任务栏图标 即使在此之前屏幕上有加载进度窗口 登录窗口等 我们更改代码来修复此问题 但不幸的是 当通过 citrix 运行应用程序时 此
  • 使已开发的应用程序启用 64 位[重复]

    这个问题在这里已经有答案了 可能的重复 迁移到 Delphi 2010 和 Unicode 时如何为 64 位做好准备 https stackoverflow com questions 1568685 how to also prepar
  • 为什么 tfVerticalCenter 和 tfBottom 在 TCanvas.TextRect 中不能按预期工作?

    考虑以下代码 procedure TForm1 PaintBox1Paint Sender TObject var vRect TRect vFormat TTextFormat vStr string begin vStr This is
  • ((指针)(P)+1)^什么时候可以起作用?

    我正在研究delphiXE2 我正在研究PInteger 如果我在我的delphi代码中这样做 var P PInteger testInt Integer Scores array 0 4 of Integer 33 44 56 78 7
  • 为什么TEdit只显示长度等于或小于37440个字符的文本?

    如果你这样做 Edit1 Text StringOfChar X 37440 它将显示文本 但是如果您这样做 Edit1 Text StringOfChar X 37441 文本将不会出现 有人知道为什么吗 如果这是一个错误 除了将所有现有
  • 通过PID获取进程句柄

    我想通过进程名称获取进程的句柄 我有 PID 但当我使用openProcess要始终获取句柄 它将返回 0 或 180 这是我用来使 PID 正常工作的函数 Handle OpenProcess PROCESS QUERY INFORMAT

随机推荐

  • 如何获取 PostgreSQL 中字符串中正则表达式匹配的位置?

    我有一个包含书名的表 我想选择标题与正则表达式匹配的书籍 并按标题中正则表达式匹配的位置对结果进行排序 单字搜索很容易 例如 TABLE book id title 1 The Sun 2 The Dead Sun 3 Sun Kissed
  • 检查Column中是否存在Cell值,然后获取NEXT Cell的值

    检查列中是否存在单元格值后 我需要获取匹配单元格旁边的单元格的值 例如 我检查中的值是否cell A1存在于column B 并假设它匹配B5 那么我想要的值是cell C5 为了解决前半个问题 我这样做了 IF ISERROR MATCH
  • 如何构建我的 PHP 项目?

    我即将开始另一个大型 PHP 项目 这次 我打算让项目文件夹变得整洁 所以我有几个关于保持我的项目干净和干燥的问题 如何区分 PHP 源文件和浏览器应访问的 PHP 文件 换句话说 我如何清楚哪些 PHP 文件提供输出 哪些提供函数或类定义
  • 在 Python 中访问 Firefox 3 cookie

    我正在尝试制作一个 python 脚本 该脚本将在 Firefox 中使用 cookie 访问网站 如果 cookielib MozillaCookieJar 支持 Firefox 3 它就会工作 有没有办法在 python 中访问 Fir
  • GO 语句破坏了 .NET 中的 SQL 执行

    我有一个非常简单的 C 命令 shell 应用程序 它执行 SQL Server 生成的 SQL 脚本来编写模式和数据脚本 它在 GO 声明中爆炸了 错误信息 GO 附近的语法不正确 这是完整的 sql 脚本 Object Table gy
  • android finish() 方法不会从内存中清除应用程序

    我有一个活动 我调用 finish 方法 但该活动没有从内存中清除 调用 finish 后 我看到 onDestroy 方法已成功执行 并且我清除了其中的所有变量和内容 应该从内存中清除它还是android的工作方式 据我了解 活动的生命周
  • 如何在MIPS汇编编程中打印数字的前几位? [复制]

    这个问题在这里已经有答案了 我是 MIPS Assembly 编程的初学者 我想知道在读入数字后如何打印数字的第一个数字 data number 1 word text read in first number li v0 5 syscal
  • 为什么Scala 支持影子变量? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Python 与 Hive 的连接

    我安装了 Hortonworks Hive ODBC 驱动程序并在数据源中创建了连接 我测试了它并且成功了 我安装了PyODBC并编写了以下代码 import os sys pyodbc con pyodbc connect DSN MyC
  • Python Selenium Webdriver - 代理身份验证

    我想将 Selenium Webdriver 与需要用户身份验证的代理一起使用 这可能吗 这就是我到目前为止所拥有的 但我不知道在哪里放置凭据 user pass proxy port from selenium import webdri
  • .NET 中是否有任何集合可以防止空条目?

    我特别考虑的是履行一套合同的集合 但我认为这个问题可以适用于任何类型 NET 框架中是否存在可以防止空条目的集合 我想要的具体行为是这样的 var set new HashSet bool added set Add null Consol
  • 使用 insertUI 方法创建不同的闪亮小部件

    我有下面的闪亮应用程序 用户可以在数据框中选择一个或多个列名称 name lt c John Jack Bill value1 lt c 2 4 6 add lt c SDF GHK FGH value2 lt c 3 4 5 dt lt
  • 在 Docker 容器中运行不同的 Linux 操作系统?

    我一直在尝试学习 Docker 但令我困惑的一件事是 不同风格的 Linux 对于主机操作系统 实际上是如何在 Docker 容器中运行的 如果我们假设我的 Docker 主机正在运行 RedHat 并且我从 Ubuntu 映像启动一个容器
  • 在头文件 (.h) 中声明构造函数然后在类文件 (.cpp) 中定义 C++ 的语法 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果有人可以解决这个问题 我将不胜感
  • 通过 HAVING(不同)进行分组:PHP、MYSQL

    id mid pid owgh nwgh 1 3 12 1 5 0 6 2 3 12 1 5 0 3 3 3 14 0 6 0 4 4 3 15 1 2 1 1 5 4 16 1 5 1 0 6 4 17 2 4 1 2 7 3 19 3
  • Android RecyclerView:拖放多个ViewType

    I implement drag and drop for a RecyclerView it works well when have one View type but reset the RecyclerView when have
  • 与数据库同步的基于 PHP 的数据库模型?

    Django 模型真的很酷 因为您可以在代码中定义所有模型 表 然后将其与数据库同步 这样 当您去更新生产服务器时 您只需运行迁移 同步脚本 并且不会忘记更新任何表 我现在正在从事的项目不是基于 Django 或 Python 而是用 PH
  • lldb:无法实现:无法获取变量的值

    我用这个命令行编译了一个cpp文件 g g test cpp 它在第 28 行抛出异常 我想通过检查 lldb 中的变量来调查原因 我在第 28 行设置了一个断点并运行a out在LLDB中 lldb n Process 84233 sto
  • 是否有任何函数可用于在 postgresql 中查找指定索引后的字符串位置

    Postgres 中可用的函数 strpos string substring eg strpos my name is database m 返回 1 我的要求是返回指定索引之后子字符串的位置 strpos string substrin
  • Delphi 中字符串的 CompareStr 和 '=' 之间的区别

    我只是想知道之间的区别CompareStr and 用于比较 Delphi 中的字符串 两者产生相同的结果 if str2 i str1 i then ShowMessage Palindrome if CompareStr str2 i