吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 595|回复: 11
收起左侧

[求助] 有如下:按数字开头的字符串列表,按数字升序排序?

[复制链接]
冥界3大法王 发表于 2024-9-22 21:57
内容如下:
1.大白补丁
10.沙盘
12.网络抓包
13.一机一码
15.易窗助手
16.注册表
17.查壳相关
18.TC9.5.1
19.FileLocatorPro_8.5.2951
2.API监控
20.快速搜索
21.列依赖相关
22.算钥查询
23.添加区段
24.资源修改
25.穷举破解
26.修复导入表
27.反调试
28.去数字签名
3.黑客进程
30.文本编辑
31.BeyondCompare
33.磁盘类
34.提权
4.16进制编辑
6.汇编比较
7.灰色按钮
8.火绒盾
9.进程监控
按数字升序排序?用Delphi实现。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

hebeijianke 发表于 2024-9-22 23:27
[Delphi] 纯文本查看 复制代码
program SortStrings;

{$APPTYPE CONSOLE}

uses
  System.SysUtils,
  System.Generics.Collections,
  System.Generics.Defaults;

// 自定义比较器
function CompareStrings(const Left, Right: string): Integer;
var
  LeftNum, RightNum: Integer;
begin
  LeftNum := StrToInt(Left.Split(['.']));
  RightNum := StrToInt(Right.Split(['.']));
  Result := CompareValue(LeftNum, RightNum);
end;

var
  StringList: TArray<string>;
  SortedList: TArray<string>;
begin
  // 初始化字符串数组
  StringList := TArray<string>.Create(
    '1.大白补丁', '10.沙盘', '12.网络抓包', '13.一机一码', '15.易窗助手',
    '16.注册表', '17.查壳相关', '18.TC9.5.1', '19.FileLocatorPro_8.5.2951',
    '2.API监控', '20.快速搜索', '21.列依赖相关', '22.算钥查询',
    '23.添加区段', '24.资源修改', '25.穷举破解', '26.修复导入表',
    '27.反调试', '28.去数字签名', '3.黑客进程', '30.文本编辑',
    '31.BeyondCompare', '33.磁盘类', '34.提权', '4.16进制编辑',
    '6.汇编比较', '7.灰色按钮', '8.火绒盾', '9.进程监控'
  );

  // 对数组进行排序
  TArray.Sort<string>(StringList, TComparer<string>.Construct(CompareStrings));

  // 输出排序后的数组
  for var Item in StringList do
    WriteLn(Item);

  // 释放数组(实际上在这个例子中不需要,因为StringList是局部变量)
  // StringList.Free; // 对于局部变量这是不必要的,且会导致编译错误
end.

不知道能运行不
 楼主| 冥界3大法王 发表于 2024-9-23 08:26
hebeijianke 发表于 2024-9-22 23:27
[mw_shl_code=delphi,true]program SortStrings;

{$APPTYPE CONSOLE}

一堆错,AI机器人太坑爹。
塞北的雪 发表于 2024-9-23 09:51
本帖最后由 塞北的雪 于 2024-9-23 09:56 编辑

[PHP] 纯文本查看 复制代码
<?php
$array = ['1.大白补丁', '10.沙盘', '12.网络抓包', '13.一机一码', '15.易窗助手',
    '16.注册表', '17.查壳相关', '18.TC9.5.1', '19.FileLocatorPro_8.5.2951',
    '2.API监控', '20.快速搜索', '21.列依赖相关', '22.算钥查询',
    '23.添加区段', '24.资源修改', '25.穷举破解', '26.修复导入表',
    '27.反调试', '28.去数字签名', '3.黑客进程', '30.文本编辑',
    '31.BeyondCompare', '33.磁盘类', '34.提权', '4.16进制编辑',
    '6.汇编比较', '7.灰色按钮', '8.火绒盾', '9.进程监控'];
natsort($array);
$array = array_values($array); // 重新索引数组
 print_r($array);
?>

[PHP] 纯文本查看 复制代码
Array
(
    [0] => 1.大白补丁
    [1] => 2.API监控
    [2] => 3.黑客进程
    [3] => 4.16进制编辑
    [4] => 6.汇编比较
    [5] => 7.灰色按钮
    [6] => 8.火绒盾
    [7] => 9.进程监控
    [8] => 10.沙盘
    [9] => 12.网络抓包
    [10] => 13.一机一码
    [11] => 15.易窗助手
    [12] => 16.注册表
    [13] => 17.查壳相关
    [14] => 18.TC9.5.1
    [15] => 19.FileLocatorPro_8.5.2951
    [16] => 20.快速搜索
    [17] => 21.列依赖相关
    [18] => 22.算钥查询
    [19] => 23.添加区段
    [20] => 24.资源修改
    [21] => 25.穷举破解
    [22] => 26.修复导入表
    [23] => 27.反调试
    [24] => 28.去数字签名
    [25] => 30.文本编辑
    [26] => 31.BeyondCompare
    [27] => 33.磁盘类
    [28] => 34.提权
)

PHP是最好的编程语言,没有之一
gaoxiangfei 发表于 2024-9-24 10:58
现在班主用哪个delphi版本呢呢,共享一下
神仙不在 发表于 2024-9-24 12:52
搞不定,求大神用python来解答
 楼主| 冥界3大法王 发表于 2024-9-24 13:19
神仙不在 发表于 2024-9-24 12:52
搞不定,求大神用python来解答

谁说的?

[Delphi] 纯文本查看 复制代码
procedure TForm8.While_Do循环Click(Sender: TObject);
var
  I: integer;
  match: TMatch;
begin
  Memo2.Clear;
  I := 1;
while I < 200 do
  begin
    match := TRegEx.match(Memo1.Text, I.ToString + '\..*');
    if match.Success then
    begin
      Memo2.Lines.Add(match.Value);
    end;
    Inc(I);
  end;
end;
 楼主| 冥界3大法王 发表于 2024-9-24 13:21
版本2:
[Delphi] 纯文本查看 复制代码
procedure TForm8.升级版合体测试正则Click(Sender: TObject);
var
  match: TMatch;
  i: Integer;
begin
  ShowMessage(Memo1.Lines.Count.ToString);
  Memo2.Clear;
  i := 1;
  repeat
    match := TRegEx.match(Memo1.Text, i.ToString + '\..*');
    if match.Success then
    begin
      Memo2.Lines.Add(match.Value);
//   ShowMessage(i.ToString);
    end;
    Inc(i);
  until (i = 200); 
end;
lyrong2008 发表于 2024-9-25 11:48
厉害了! delphi接触的并不多
 楼主| 冥界3大法王 发表于 2024-9-26 11:44
下面是当初脑残解决方案:(有bug)
[Delphi] 纯文本查看 复制代码
procedure TForm1.用户指定文件夹下生成启动配置Click(Sender: TObject);
var
  待生成工具集所在路径: string;
  files: TStringDynArray;
  配置文件中完整文件路径: string;
  stringList: TStringList;
  K, I: Integer;
  变量1, 变量2: string;
  match: TMatch;
begin
  Memo1.Clear;
  Memo2.Clear;
  待生成工具集所在路径 := InputBox('请输入', '准备遍历的文件夹完整路径', 'X:\0.自创工具for delphi10.4.1\20.杂交外观浮动工具栏漂亮版x64dbg贴心助手\Tools');
  files := TDirectory.GetFiles(待生成工具集所在路径, '*.exe', TSearchOption.soAllDirectories);
 //  for str in files do
 //   Memo2.Lines.Add(str);
  stringList := TStringList.Create;
  for 配置文件中完整文件路径 in files do
  begin
//    ShowMessage(str);
    stringList.Sorted := True;
    stringList.Duplicates := dupIgnore;    //去重项
    stringList.BeginUpdate;                //必须加上这个!

    变量1 := StringReplace(配置文件中完整文件路径, 待生成工具集所在路径 + '\', '', [rfReplaceAll]);
    //ShowMessage(变量1);
    match := TRegEx.match(变量1, '\\.*');
    if match.Success then
    begin
     //ShowMessage(match.Value);
//      Clipboard.AsText := match.Value;
      变量2 := match.Value;
      变量2 := StringReplace(变量1, 变量2, '', [rfReplaceAll]);
    end;
    stringList.EndUpdate;         //似乎不加也行!
    stringList.Add(变量2);
    stringList.Sort;
  end;

  //放在这下面!
  K := 1;
  while K < 200 do    //假设InputBox用户指定的目录下最多200个子工具文件夹!
  begin
    match := TRegEx.match(stringList.Text, K.ToString + '\..*');
    if match.Success then
    begin
      Memo2.Lines.Add(match.Value);
//      ShowMessage(match.Value);
//这后面加上按[小节找到]后的内容,依次写入.ini
    end;
    Inc(K);
  end;


//  Memo1.Lines.AddStrings(stringList);
end;



=============================
下面是AI回答,加我自己修改完善的,测试达标的代码:
[Delphi] 纯文本查看 复制代码
procedure SortByNumericValue(const List: TStringList);
var
  I, J: Integer;
  Regex: TRegEx;
  Match: TMatch;
  IntValueI, IntValueJ: Integer;
begin
  // 正则表达式,用于匹配字符串中的数字
  Regex := TRegEx.Create('\d+');

  // 使用冒泡排序算法根据数字对字符串列表进行排序
  for I := 0 to List.Count - 2 do
    for J := I + 1 to List.Count - 1 do
    begin
      // 尝试匹配数字
      Match := Regex.Match(List[I]);
      if Match.Success then
        IntValueI := StrToInt(Match.Value)
      else
        IntValueI := 0;

      Match := Regex.Match(List[J]);
      if Match.Success then
        IntValueJ := StrToInt(Match.Value)
      else
        IntValueJ := 0;

      // 如果第二个数字大于第一个数字,则交换它们的位置
      if IntValueJ < IntValueI then
      begin
        List.Exchange(I, J);
      end;
    end;
end;


procedure TForm1.重新最优化组合Click(Sender: TObject);
var
  DirectoriesList: TStringDynArray;
  I: Integer;
  小节名列表: TStringList;
  待生成工具集所在路径: string;
begin
  小节名列表 := TStringList.Create;
  待生成工具集所在路径 := InputBox('请输入', '准备遍历的文件夹完整路径', 'X:\0.自创工具for delphi10.4.1\20.杂交外观浮动工具栏漂亮版x64dbg贴心助手\Tools');
  try
    //获取当前目录及其所有子目录的名称列表
    DirectoriesList := TDirectory.GetDirectories(待生成工具集所在路径);
    //遍历并显示所有目录名称
    for I := 0 to Length(DirectoriesList) - 1 do
    begin
      Memo1.Lines.Add(ExtractFileName(DirectoriesList[I]));
      小节名列表.Add(ExtractFileName(DirectoriesList[I]));
    end;
  except
    on E: Exception do
      Writeln('发生异常: ' + E.Message);
  end;

  Memo1.Clear;
  try
// 添加一些包含数字的字符串
//    小节名列表.Add('1.大白补丁');
    // 排序
    SortByNumericValue(小节名列表);
    // 输出排序后的结果
    for var Item in 小节名列表 do
      Memo1.Lines.Add(Item);
  finally
    ShowMessage('小节名列表(StringList的内容)是:' + #13#10 + 小节名列表.Text);
    小节名列表.Free;
  end;
  ///// ↑↑↑↑↑↑以下内容完成遍历当前目录,得到小节名,排序备用 ↑↑↑↑↑↑   ///
end;
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-13 22:45

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表