chatgpt-web-midjourney-proxy icon indicating copy to clipboard operation
chatgpt-web-midjourney-proxy copied to clipboard

最近总是出现这种问题,大家有遇到过吗?【代码显示头文件的'<' 时,显示错乱,显示为&lt; 】

Open Qin-shun-Li opened this issue 1 year ago • 5 comments

WeChat67aa3107caa70af47790e930ac0d76dc 每次显示C语言头文件的时候就会出现这种问题,有很大概率出现,用的是gpt-4-turbo一系列的模型1106,0125,0409

可以给大家几个提示词试一试 提示词一: 使用C语言完成下面编程问题 给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配。

'.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。

示例 1:

输入:s = "aa", p = "a" 输出:false 解释:"a" 无法匹配 "aa" 整个字符串。 示例 2:

输入:s = "aa", p = "a*" 输出:true 解释:因为 '*' 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 'a'。因此,字符串 "aa" 可被视为 'a' 重复了一次。 示例 3:

输入:s = "ab", p = "." 输出:true 解释:"." 表示可匹配零个或多个('*')任意字符('.')。

bool isMatch(char* s, char* p) {

}

提示词二: 使用C语言完成下面编程问题 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。 X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。 C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。 给你一个整数,将其转为罗马数字。

示例 1:

输入: num = 3 输出: "III" 示例 2:

输入: num = 4 输出: "IV" 示例 3:

输入: num = 9 输出: "IX" 示例 4:

输入: num = 58 输出: "LVIII" 解释: L = 50, V = 5, III = 3. 示例 5:

输入: num = 1994 输出: "MCMXCIV" 解释: M = 1000, CM = 900, XC = 90, IV = 4.

Qin-shun-Li avatar Apr 12 '24 02:04 Qin-shun-Li

通过复制出来看看 gpt 吐了什么东西出来

image

Dooy avatar Apr 12 '24 03:04 Dooy

为了将一个给定的整数转换为罗马数字,我们可以使用一个贪心算法,从最大的罗马数字值开始匹配,直到整数减少到零。下面是一个使用C语言实现的转换函数,这个函数考虑了所有罗马数字的可能组合,包括那些特殊的减法规则。

#include &lt;stdio.h>

void intToRoman(int num, char *result) {
    // 罗马数字值和相应的符号
    int values[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
    char *symbols[] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
    
    // 初始化结果字符串
    *result = '\0';
    
    // 从
失败原因:

{ "line": 348, "column": 3797, "sourceURL": "http://127.0.0.1:13667/assets/index.vue_vue_type_script_setup_true_lang-2a434168.js" }

__________________________________
以上就是复制之后的内容,因为格式错乱,我手动给他截止了

Qin-shun-Li avatar Apr 12 '24 22:04 Qin-shun-Li

还有一个是示例1的输出,如下: 以下是使用C语言实现正则表达式匹配的代码。这个函数主要通过递归方式处理各种字符匹配情况,包括普通字符、'.' 和 '*'。

#include &lt;stdbool.h>

bool isMatch(char* s, char* p) {
    // 如果模式串 p 为空,那么文本串 s 也必须为空才能匹配成功
    if (*p == '\0') return *s == '\0';

    // 检查当前字符是否匹配(s 不为空且字符相同,或 p 的当前字符是 '.')
    bool first_match = (*s != '\0') && (*p == '.' || *p == *s);

    // 看 p 的下一个字符是否是 '*',如果是则进行递归判断
    if (*(p + 1) == '*') {
        // '*' 表示前一个字符可以出现 0 次或多次
        // 分两种情况讨论:不使用 '*' 匹配或使用 '*' 至少匹配一次(递归 s 的下一个字符)
        return isMatch(s, p + 2) || (first_match && isMatch(s + 1, p));
    } else {
        // 如果下一个字符不是 '*',则简单递归匹配下一个字符
        return first_match && isMatch(s + 1, p + 1);
    }
}

int main() {
    char* s1 = "aa";
    char* p1 = "a";
    printf("Example 1: %s<br />", isMatch(s1, p1) ? "true" : "false"); // 输出:false

    char* s2 = "aa";
    char* p2 = "a*";
    printf("Example 2: %s<br />", isMatch(s2, p2) ? "true" : "false"); // 输出:true

    char* s3 = "ab";
    char* p3 = ".";
    printf("Example 3: %s<br />", isMatch(s3, p3) ? "true" : "false"); // 输出:false (修正错误示例)

    return 0;
}

在这段代码中,isMatch 函数通过递归处理两大类型的字符:普通字符和带有特殊含义的字符('.' 和 '')。对于 '',我们处理它表示的“零个或多个前面的字符”匹配方式,即通过递归调用在不使用 '' 或使用 '' 的情况下继续匹配余下的字符串。注意,演示代码中的输入输出和示例说明应保持一致。

Qin-shun-Li avatar Apr 12 '24 22:04 Qin-shun-Li

image image

复制出来的实际效果是这样的

Qin-shun-Li avatar Apr 12 '24 22:04 Qin-shun-Li

配上一条最新的格式问题的回答: 图片: image 提示词: 给我讲讲C语言的qsort函数,给我配上一个简单的例子 从回答那复制出来的样式: image

Qin-shun-Li avatar Apr 12 '24 23:04 Qin-shun-Li