无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
123
返回列表 发新帖
楼主: pda8888
打印 上一主题 下一主题

[分享] 居然没人讨论一下deepseek?

  [复制链接]
61#
发表于 2025-2-3 19:09:22 | 只看该作者
回复

使用道具 举报

62#
发表于 2025-2-3 19:10:03 来自手机 | 只看该作者
不会又缴 智商税 吧!
回复

使用道具 举报

63#
 楼主| 发表于 2025-2-3 20:23:14 | 只看该作者
马老板的通义也很强,https://tongyi.aliyun.com/qianwen/ 可以一试。
回复

使用道具 举报

64#
 楼主| 发表于 2025-2-4 10:38:20 | 只看该作者
一个简单的问题让AI们分出了高下:
问:批处理中,把字符串中的=替换成a,只能用纯批处理语法,不借助第3方工具,如powershell,如何写?
通义千问2.5、豆包、deepseek 3个国产AI 多轮改进无果,其中通义千问2.5、豆包至少进行了10轮以上改进,要么结果不正确,要么被语法错误直接退出。deepseek只进行了3轮,就一直提示 “服务器繁忙,请稍后再试。”无法再继续。
最后,请出了chatGPT,结果恰老师一把搞定:
  1. @echo off
  2. setlocal enabledelayedexpansion

  3. set "str=hello=world"
  4. set "newstr="
  5. for /L %%i in (0,1,100) do (
  6.     set "char=!str:~%%i,1!"
  7.     if "!char!"=="" goto :done
  8.     if "!char!"=="=" (
  9.         set "char=a"
  10.     )
  11.     set "newstr=!newstr!!char!"
  12. )
  13. :done
  14. echo %newstr%
复制代码

不黑不吹,实测。
回复

使用道具 举报

65#
 楼主| 发表于 2025-2-4 10:45:38 | 只看该作者
本帖最后由 pda8888 于 2025-2-4 10:48 编辑

我说:
你怎么那么厉害,隔壁通义、豆包、ds都搞不定。虽然你的代码有些瑕疵,即:for /L %%i in (0,1,100),假定了原始字符串长度在100以内。

chatGPT说:
哈哈,多谢夸奖!你提的这个问题很关键,确实 for /L %%i in (0,1,100) 只适用于长度在 100 以内的字符串。要更通用,可以动态计算字符串长度,比如这样:
  1. @echo off
  2. setlocal enabledelayedexpansion

  3. set "str=hello=world=this=is=a=test"
  4. set "len=0"

  5. :: 计算字符串长度
  6. for /L %%i in (0,1,500) do (
  7.     if "!str:~%%i,1!"=="" goto :length_done
  8.     set /a len+=1
  9. )
  10. :length_done

  11. set "newstr="
  12. for /L %%i in (0,1,%len%) do (
  13.     set "char=!str:~%%i,1!"
  14.     if "!char!"=="=" (
  15.         set "char=a"
  16.     )
  17.     set "newstr=!newstr!!char!"
  18. )
  19. echo %newstr%
复制代码
优化点
动态计算字符串长度
先用 for /L 循环找出 str 长度,避免固定长度 100 的限制。
支持任意长度的字符串
现在可以处理更长的 str,只受 cmd.exe 变量最大长度(8191 字符)的限制。

我又说:
假定500也是瑕疵,应该用死循环,直到拆解的单一字符是空。

chatGPT说:
你说得对,500 也是个固定值,最稳妥的方法是用死循环,直到拆解出的单字符为空。这是改进版代码:
  1. @echo off
  2. setlocal enabledelayedexpansion

  3. set "str=hello=world=this=is=a=test"
  4. set "newstr="
  5. set "i=0"

  6. :loop
  7. set "char=!str:~%i%,1!"
  8. if "!char!"=="" goto :done
  9. if "!char!"=="=" set "char=a"
  10. set "newstr=!newstr!!char!"
  11. set /a i+=1
  12. goto :loop

  13. :done
  14. echo %newstr%
  15. exit /b
复制代码
改进点
使用死循环 (:loop + goto)
逐字符解析 str,直到 char 为空,保证适用于任何长度的字符串。
避免 for /L 限制
不再受固定长度 (100、500) 的影响,适应更长的 str。

姜还是老的辣,厉害!即使ds不提示繁忙,第4把搞定,跟恰老师一把搞定,区别太大。
回复

使用道具 举报

66#
发表于 2025-2-4 10:58:20 | 只看该作者
pda8888 发表于 2025-2-4 10:38
一个简单的问题让AI们分出了高下:
问:批处理中,把字符串中的=替换成a,只能用纯批处理语法,不借助第3 ...

deepseek回答在批处理中,可以使用变量替换功能将字符串中的等号 `=` 替换为 `a`。以下是具体实现方法:

### 方法 1:直接替换(无特殊字符时)
```batch
@echo off
set "str=Your=String=With=Equals"
set "str=%str:==a%"
echo 替换后的字符串: %str%
```

### 方法 2:使用延迟扩展(处理特殊字符时)
```batch
@echo off
setlocal enabledelayedexpansion
set "str=Your=String=With=Equals&More"
set "str=!str:==a!"
echo 替换后的字符串: !str!
```

### 代码解释:
1. **变量替换语法**:  
   使用 `%var:old=new%` 或 `!var:old=new!`(延迟扩展)将变量中的 `old` 替换为 `new`。  
   此处 `old` 是 `=`,因此写法为 `%str:==a%`,即:  
   - 第一个 `=` 表示原字符。  
   - 第二个 `=` 是分隔符(固定语法)。  
   - `a` 是替换后的新字符。

2. **处理特殊字符**:  
   如果字符串包含 `&`、`|` 等特殊符号,需启用延迟扩展(`setlocal enabledelayedexpansion`)并使用 `!` 代替 `%` 访问变量。

### 示例输出:
```
替换后的字符串: YourAStringAWithAEquals
```

### 注意事项:
- 如果字符串来自文件或外部输入,需先将其存入变量再操作。  
- 等号 `=` 在批处理中无特殊转义需求,直接替换即可。
回复

使用道具 举报

67#
 楼主| 发表于 2025-2-4 11:08:59 | 只看该作者
本帖最后由 pda8888 于 2025-2-4 11:24 编辑

楼上,要实测。
AI们都能很快作答,不过要以实测验证为准。你贴的ds的两个方案:
方案一的输出是:
  1. 此时不应有 ==a%"。
  2. 命令语法不正确。
复制代码

方案二的输出是:
  1. 替换后的字符串: str:==a
复制代码

顺便再贴一个图,恰老师太有趣了:

回复

使用道具 举报

68#
发表于 2025-2-4 11:10:02 | 只看该作者
各有特色,人工智能还要继续训练
回复

使用道具 举报

69#
发表于 2025-2-4 11:46:12 | 只看该作者
已经在本地部署了32B版本
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-2-20 13:31

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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