我被GPT替代了!!!

项目场景:

今天工作中需要让C语言来解析这个字串“print,scan,setting”的内容。
且字串的长度和内容的数量预先都不知道,唯一知道的信息就是内容是被逗号所分割。

我给嵌入式工程师丢脸了。我尝试着去写了一遍,没能成功。最后我用chatgpt帮我写了一遍,不得不说,真牛🐂!!!

虽然说,使用GPT写的,我们也要学习其中的逻辑融会贯通。
下面我们就来一起解析以下GPT写的代码,让我们看看GPT到底牛在哪


ChatGPT答复

ChatGPT给我的回复

废话不多说,直接上代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    // 给定的字符串
    char inputString[] = "print,scan,setting";
    
    // 存储提取内容的动态数组
    char **extractedArray = NULL;
    int arraySize = 0;

    // 使用strtok按逗号分割字符串
    char *token = strtok(inputString, ",");
    
    // 逐个提取子串并动态添加到数组
    while (token != NULL) {
        // 动态分配内存保存当前子串
        char *currentSubstring = strdup(token);

        // 动态扩展数组
        extractedArray = realloc(extractedArray, (arraySize + 1) * sizeof(char *));
        extractedArray[arraySize] = currentSubstring;
        arraySize++;

        token = strtok(NULL, ",");
    }

    // 打印存储在数组中的内容
    for (int i = 0; i < arraySize; i++) {
        printf("提取的内容[%d]: %s\n", i, extractedArray[i]);
    }

    // 释放动态分配的内存
    for (int i = 0; i < arraySize; i++) {
        free(extractedArray[i]);
    }
    free(extractedArray);

    return 0;
}

代码分析:

  • 初始化指针数组

首先用的是二级指针来保存字串中的内容,这里的二级指针可以理解为指针的数组自我感觉比较好记。并且用arraySize来记录数组的成员的数量。

    // 存储提取内容的动态数组
    char **extractedArray = NULL;
    int arraySize = 0;

  • 分割字符串

在用strtoken函数来拆分字串中的内容。

这里大概讲一下,strtoken函数原型如下
char *strtok(char *str, const char *delim)
str—要被分解的字符串,delim—用作分隔符的字符(可以是一个,也可以是集合)
可以理解为在str搜寻delim,并以delim为分隔符来分割字串str。

利用这个函数直接按照逗号来分割字串,并返回字串的首地址。
这个函数用的太漂亮了,佩服。

    // 使用strtok按逗号分割字符串
    char *token = strtok(inputString, ",");
  • 循环提取字串中的内容

第一个拆分的字串保存在临时指针currentSubstring中,再利用realloc动态扩展提取内容数据空间,再将临时指针的内容赋值给指针数组。随后再次获取下一个字串中的内容,直到遍历到字串的末尾‘\0’为止。

realloc函数的作用为动态分配,可以给已经分配完空间的指针,重新分配指针的空间大小
我理解,这里的作用在于不停的给指针数组扩容,直到没有内容为止

strdupy也是个考点,详情可以参考我另一篇文章https://editor.csdn.net/md/?articleId=135208320

 // 逐个提取子串并动态添加到数组
    while (token != NULL) {
        // 动态分配内存保存当前子串
        char *currentSubstring = strdup(token);

        // 动态扩展数组
        extractedArray = realloc(extractedArray, (arraySize + 1) * sizeof(char *));
        extractedArray[arraySize] = currentSubstring;
        arraySize++;

        token = strtok(NULL, ",");
    }
  • 打印信息

这里就是循环打印log了

// 打印存储在数组中的内容
    for (int i = 0; i < arraySize; i++) {
        printf("提取的内容[%d]: %s\n", i, extractedArray[i]);
    }
  • 循环释放

申请空间了,别忘记循环释放。

    // 释放动态分配的内存
    for (int i = 0; i < arraySize; i++) {
        free(extractedArray[i]);
    }
    free(extractedArray);

    return 0;

总结:

这里用到了不少生僻的函数strtok、strdup、realloc。
不得不说GPT的知识储备量真惊人呀,如果我自己的写的话,两天不知道还能不能搞定。
确实有值得我们学习的地方,但也不能完全依靠它,吃一堑长一智。
下次我们面对这种情况就有办法应对了。

到这就结束了,如果觉着还不错可以留一个小心心,作者接着分享工作中遇到的有趣的困难。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值