如何判断字符串中的所有字符是否相等

2023-12-08

我需要知道字符串中的所有字符是否都相等(由同一字符组成)。该函数必须返回 true 或 false,具体取决于字符串的所有元素是否等于特定字符。

我编写的这个函数运行良好,但我正在寻找更优化(最快)的解决方案,字符串可以有数千个字符。

function AllElementsAreEqual(Element:Char;Str:String):Boolean;
var
  i : Integer;
begin
Result:=True;
 if Str<>'' then
  for i:=1 to Length(Str) do
   if  Str[i]<>Element then
   begin
      Result:= False;
      exit;
   end;
end;

UPDATE最后使用巴里·凯利建议并添加inline指令后,性能显着提高。

function AllElementsAreEqual(Const Element:Char;Str:String):Boolean;inline;
type
ArrayInt = Array of Integer;
var
  i    : Integer;
  Delta: Integer;
  List : ArrayInt;
  Test : Integer;
begin
  Result:=True;
  Delta:=(Length(Str) mod  4);
  if Delta<>0 then
  Str:=Str+StringOfChar(Element,4-Delta);
  Test:=Ord(Element) + Ord(Element) shl 8 + Ord(Element) shl 16 + Ord(Element) shl 24;
  List:=ArrayInt(@(Str[1]));

  for i:=0 to ((Length(Str) div 4)-1) do
   if List[i]<>Test  then
    begin
     Result:=False;
     exit;
    end;
end;

UPDATE 2

很抱歉,我发布了解决方案的旧实现(有错误),现在已修复。 谢谢The_Fox更好地实施巴里建议。


您可以考虑创建一个Integer值与Element重复 4 次(因为这是AnsiChar在 Delphi 7 中),移位如下Ord(Element) + Ord(Element) shl 8 + Ord(Element) shl 16 + Ord(Element) shl 24,然后将字符串类型转换为PIntegerArray (^array[0..MaxInt div 4 - 1] of Integer)并循环它Length(Str) div 4次,作为整数而不是字符进行比较。您需要比较最后几个Length(str) mod 4不过手动输入字符。

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

如何判断字符串中的所有字符是否相等 的相关文章

  • 我如何在Delphi中处理事件?

    例如 我有一个程序 在单击 Button1 后执行某些操作 如果没有 Button1Click 中的代码 如何处理按钮的 onclick 事件 我需要为 Button1 动态添加事件 unit Unit1 interface uses Wi
  • 2 批字符串问题

    1 是否有任何内置函数可以告诉我变量的内容是否仅包含大写字母 2 有没有办法查看变量是否包含字符串 例如 我想查看变量 PATH 是否包含 Ruby 对于第 1 部分 findstr就是答案 您只需使用正则表达式功能即可errorlevel
  • 处理 TShellListView 后代中的文件放置

    我正在尝试创建 TShellListView 的后代 它接受从 Windows 资源管理器中删除的文件 我想在组件定义中处理拖 放操作 而不必在任何使用该组件的应用程序中实现它 我找到了接受从 Windows 资源管理器中拖放的文件的示例
  • 如何在 Perl 中使用 use strict 一次一行处理多行字符串?

    我正在尝试找出 PBP 批准的正确方法来一次一行处理多行字符串 许多 Perl 编码人员建议将多行字符串视为文件句柄 除非您在脚本中使用 use strict 否则它可以正常工作 然后 您会收到编译器发出的警告 提示在使用严格引用时无法使用
  • 以编程方式重新启动 Delphi 应用程序

    应该不可能运行我的应用程序的多个实例 因此项目源码包含 CreateMutex nil False PChar ID if GetLastError ERROR ALREADY EXISTS then Halt 现在我想以编程方式重新启动我
  • TOpenDialog/NSOpenPanel 无法在沙盒 Delphi 应用程序中工作

    Firemonkey 应用程序中的 TOpenDialog 似乎存在问题 该应用程序已针对 Mac Appstore 进行沙箱处理 我使用XE3 但它也存在于XE2中 我其实在这里找到了一份QC报告 但仍然没有解决 http qc emba
  • 为什么replaceAll在这行代码中不起作用? [复制]

    这个问题在这里已经有答案了 String weatherLocation weatherLoc 1 toString weatherLocation replaceAll how weatherLocation replaceAll wea
  • 为什么不能用反斜杠结束原始字符串? [复制]

    这个问题在这里已经有答案了 我在这里很困惑 尽管原始字符串会转换每个 to 但是当这个 最后出现它会引发错误 gt gt gt r so m e te xt so m e te xt gt gt gt r so m e te xt Synt
  • Python:字符串不会转换为浮点数[重复]

    这个问题在这里已经有答案了 我几个小时前写了这个程序 while True print What would you like me to double line raw input gt if line done break else f
  • 在python中,如何仅搜索所选子字符串之前的一个单词

    给定文本文件中的长行列表 我只想返回紧邻其前面的子字符串 例如单词狗 描述狗的单词 例如 假设有这些行包含狗 hotdog big dog is dogged dog spy with my dog brown dogs 在这种情况下 期望
  • 为什么 new String("Hello") 在 C# 中无效?

    制作背后的逻辑 原因是什么 String s new String Hello World 在 C 中非法 错误是 string String char 的最佳重载方法匹配有一些无效参数 我对 API 文档不感兴趣 我感兴趣的是为什么这是非
  • TObjectList.Contains 导致 Delphi 2009 中的访问冲突

    在 Delphi 2009 中 到目前为止 我在泛型方面没有遇到大问题 使用 Generics Collections 列表 没有特殊的泛型功能 现在我发现这段代码会在访问的行中导致AVMyList Contains 如果我声明 TMyLi
  • Delphi AES 库 (Rijndael) 使用 KAT Vectors 进行测试

    对于这两个库 Delphi 加密概要 v 5 2 http code google com p delphidec TurboPower 密码箱 v 2 07 http lockbox seanbdurkin id au tiki list
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • 从字符串末尾删除多个字符类型

    我有一个构建地址字段的循环 其中一些字段在字符串末尾可能为空 List
  • 如何在运行时(Delphi/Windows)程序中添加代码?

    我正在Windows XP Delphi 7上工作 我需要在正在运行的程序中添加一些过程 或函数 并且我不想在完成后再次重新编译它 我只有一个具有 5 个功能的主机应用程序来发送不同类型的警报 但是还有其他新的警报类型 所以我必须执行新的功
  • 字符串数组文本格式化

    我有这个字符串 String text Address 1 Street nr 45 Address 2 Street nr 67 Address 3 Street nr 56 n Phone number 000000000 稍后将被使用
  • Javascript split 不是一个函数

    嘿朋友们 我正在使用 javascript sdk 通过 jQuery facebook 多朋友选择器在用户朋友墙上发布信息 但是我收到此错误friendId split 不是函数 这是我的代码 function recommendToFr
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • Mac 上的 Delphi - 可能吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我负责一个 Delphi Win32 项目管理应用程序 我刚刚完成了向 Delphi 2009 的迁移

随机推荐

  • 计算 Google Maps API v3 中的折线(路线)和标记之间的距离

    有没有方便的方法来计算折线 由 Google Directions 生成的路线 和不在该折线上的标记之间的直接 最短 距离 我发现的唯一方法是循环遍历Polyline getPath 手动计算顶点来计算最短距离 但这似乎有点苛刻 var p
  • 如何将多个触摸操作附加到单个列表项?

    我正在使用以下列表布局items已关联的comments 的数量comments由右侧的框表示 目前 我正在使用onListItemClick处理程序启动另一个details view public class CustomListFrag
  • 如何使用 XSLT 2.0 和 REGEX(没有 \b 单词边界)在文本中查找单词?

    我正在尝试使用 REGEX 扫描一串单词并在 XSLT 2 0 样式表中查找特定单词 不区分大小写 的存在 我有一个单词列表 我希望迭代并确定它们是否存在于给定字符串中 我想匹配给定文本中任何位置的单词 但是我不想匹配within a wo
  • 使用“purrr”从列表列表中提取数据到自己的“data.frame”中

    代表性样本数据 列表列表 l lt list structure list a 1 54676469632688 b s c T d structure list id 5L label Utah link Asia Anadyr scor
  • 如何使用 SqlAlchemy 进行更新插入?

    我有一条记录 如果它不存在 我希望存在于数据库中 如果它已经存在 主键存在 我希望将字段更新到当前状态 这通常被称为upsert 以下不完整的代码片段演示了可行的方法 但它似乎过于笨拙 特别是如果有更多列 更好 最好的方法是什么 Base
  • 找不到 HTML 模板 [重复]

    这个问题在这里已经有答案了 当我尝试从模板文件夹加载注入的页面时 出现页面未找到错误 index html 页面是我启动服务器时默认启动的页面 它还包含 ng view 因此我可以注入 Angular 配置中指定的页面 这是我的项目结构 a
  • 如何在构建 Docker 映像时恢复 Postgres 转储?

    我试图避免在工作流程中接触共享开发数据库 为了使这更容易 我希望在我的磁盘上有 Docker 映像定义来满足我需要的模式 然而 我坚持制作一个 Dockerfile 该文件将创建一个已恢复转储的 Postgres 映像 我的问题是 在构建
  • CMakeLists.txt 可以依赖于函数解析的文件吗?

    我对 CMake 相当陌生 第一次从一个由许多子项目组成的较大项目开始 出于特殊原因 如下所述 出于好奇 我已经有了一组包含文件 其中包含有关每个 CMake 目标 lib 或 exe 所需的源文件的信息 目前 我更喜欢 重新 使用这些文件
  • 处理 Recyclerview 中的点击项

    我有一个卧式回收机view inside 垂直回收视图 我添加列表cardview inside 卧式回收机view 当点击主活动的项目时如何获取项目信息 谢谢 public class MainActivity extends AppCo
  • 使用 xslt 从 xpath 语句列表中注释 xml 实例

    给定一个 xpath 语句列表 我想编写一个样式表 它将运行一个 xml 文档并输出相同的文档 但在每个 xpath 语句中标识的节点之前插入注释 我们来举个例子 从包含 xpath 语句的 xml 实例开始
  • 没有 ID 的清除超时

    有什么办法可以清除吗setTimeout 如果它没有明确的 ID 问题是我不允许更改一些已经运行的代码并在没有任何处理程序的情况下设置计时器 JS 是否为它们设置了 匿名处理程序 这些计时器是否存储在可访问的地方 我可以获得这些属性中的任何
  • 格式错误的字符串 ValueError ast.literal_eval() 与元组的字符串表示形式

    我正在尝试从文件中读取元组的字符串表示形式 并将该元组添加到列表中 这是相关代码 raw data userfile read split n for a in raw data print a btc history append ast
  • Rails 3 用户匹配算法到 SQL 查询(复杂)

    我目前正在开发一款根据回答的问题匹配用户的应用程序 我在正常的 RoR 和 ActiveRecord 查询中实现了我的算法 但使用它的速度很慢 将一个用户与其他 100 个用户进行匹配需要 Completed 200 OK in 17741
  • android:将 Android Studio 升级到 2.3 后无法构建项目

    因此 很高兴将我的 Android Studio 从稳定版本 2 2 更新到金丝雀通道 2 3 但不幸的是 它有严重的错误 项目无法构建 我尝试打开以前的项目并尝试创建新的示例应用程序 但出现了以下相同的错误 Gradle MyApplic
  • 删除两个字符串的相等部分

    在 PHP 中 我在服务器上有两条路径 它们都有匹配的部分 我想加入他们 但删除相同的部分 EXAMPLE 路径 1 home7 用户名 public html 目录 anotherdir wp content uploads 路径 2 d
  • 在 Swift 中使用 TWTRShareEmailViewController (Fabric Twitter SDK) 请求用户 Twitter 邮件

    我想请求该用户的 Twitter 邮件 在https dev twitter com twitter kit ios request email我们可以在 Obj C 中看到代码 但我需要 Swift 中的代码 但我无法翻译它 请问有人知道
  • 可疑文件操作..连接的路径...位于基本路径组件之外

    尝试将 png 文件上传到管理图像表中时出现错误 可疑文件操作位于 admin products productimage add 连接的路径 product images Laptop Computer 5 copy png 位于基本路径
  • 确保 DateTime 属性返回 DateTimeKind.Utc

    是否可以在实体对象中定义 DateTime 属性Kind DateTimeKind Utc通过使用 edmx 文件或 t4 模板 如果可能使用 t4 请描述如何更改属性 目前该属性生成为 EdmScalarPropertyAttribute
  • iPhone上取消控制播放音乐时如何设置标题?

    我正在开发一个广播应用程序 它支持在后台播放音乐 但我陷入了如何设置音乐标题以取消控制的困境 The difference between my app and Music is as following 我应该怎么做才能让我的应用程序显示
  • 如何判断字符串中的所有字符是否相等

    我需要知道字符串中的所有字符是否都相等 由同一字符组成 该函数必须返回 true 或 false 具体取决于字符串的所有元素是否等于特定字符 我编写的这个函数运行良好 但我正在寻找更优化 最快 的解决方案 字符串可以有数千个字符 funct