当前位置: 首页 > news >正文

使用老北鼻CharGPT对话查询 Qt/C++ 使用gumbo-parse解析加载的html全过程

记下使用老北鼻CharGPT对话查询 Qt/C++解析html网页全过程。
[gumbo-parse] Gumbo是HTML5解析算法作为纯C99库实现,没有外部依赖性。它被设计为其他工具和库的构建模块,比如linters、验证器、模板语言、重构和分析工具。详细说明参考original-README.md

目录导读

    • 一、通过老北鼻CharGpt 对话 了解到gumbo-parse库
    • 二、过程中所遇到的问题
      • gumbo-parser库是C语言开发的
      • gumbo-query库是C++开发的
      • gumbo-parser 不支持windows环境编译
    • 三、解决问题

一、通过老北鼻CharGpt 对话 了解到gumbo-parse库

免费GPT

来自你的消息:
Qt库为什么不能加载html

来自老北鼻AI 的消息:
Qt库本身是支持加载和显示HTML内容的。你可以使用Qt提供的QWebView或QWebEngineView类来加载和显示HTML页面。

QWebView类是基于WebKit引擎的,可以加载和显示HTML页面。它提供了一些方法来加载HTML内容,例如load()或setHtml()方法。以下是一个使用QWebView加载HTML页面的示例:

#include <QtWidgets>
#include <QtWebKitWidgets>int main(int argc, char *argv[])
{QApplication app(argc, argv);QWebView webView;webView.setHtml("<html><body><h1>Hello, World!</h1></body></html>");webView.show();return app.exec();
}

QWebEngineView类是基于Chromium引擎的,也可以加载和显示HTML页面。同样,它也提供了一些方法来加载HTML内容,例如load()或setHtml()方法。以下是一个使用QWebEngineView加载HTML页面的示例:

#include  <QtWidgets>
#include <QtWebEngineWidgets>int main(int argc, char *argv[])
{QApplication app(argc, argv);QWebEngineView webView;webView.setHtml("<html><body><h1>Hello, World!</h1></body></html>");webView.show();return app.exec();
}

如果你在使用Qt库加载HTML页面时遇到了问题,可能是由于以下原因之一:

  1. 缺少必要的Qt模块:确保你的项目中包含了正确的Qt模块。对于QWebView,你需要包含QtWebKitWidgets模块;对于QWebEngineView,你需要包含QtWebEngineWidgets模块。

  2. 缺少相关的依赖库:Qt的Web模块可能依赖于某些外部库(例如WebKit或Chromium)。请确保这些依赖库已正确安装,并且在你的项目中正确链接。

  3. Qt版本不兼容:某些特定版本的Qt可能不包含特定的Web模块。请确保你所使用的Qt版本支持加载HTML内容。

如果你能提供更多关于你遇到问题的具体信息,我可以帮助你更好地解决问题。

来自你的消息:
Qt应该怎么访问http请求并获取返回的html界面内容

来自老北鼻AI 的消息:
要使用Qt访问HTTP请求并获取返回的HTML页面内容,可以使用Qt的网络模块。Qt提供了两个主要的类来处理网络请求:QNetworkAccessManager和QNetworkRequest。

首先,你需要创建一个QNetworkAccessManager对象来管理网络请求。然后,你可以使用QNetworkRequest对象来设置请求的URL和其他相关的参数。最后,通过发送请求并接收响应来获取HTML页面的内容。

以下是一个简单的示例代码,展示了如何使用Qt来获取HTML页面的内容:

#include <QtNetwork>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QNetworkAccessManager manager;QNetworkRequest request(QUrl("http://example.com")); // 设置请求的URLQNetworkReply* reply = manager.get(request); // 发送GET请求QEventLoop loop;QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);loop.exec(); // 等待请求完成if (reply->error() == QNetworkReply::NoError) {QString html = reply->readAll(); // 获取HTML页面内容qDebug() << html;} else {qDebug() << "Error:" << reply->errorString();}reply->deleteLater(); // 释放资源return a.exec();
}

这段代码发送了一个GET请求到"example.com"网站,并获取了返回的HTML页面内容。如果请求成功,将打印HTML页面内容;如果请求失败,将打印错误信息。

注意:在使用这段代码前,需要在.pro文件中添加网络模块的依赖,即在.pro文件中添加QT += network

希望这个示例代码能帮到你!

来自你的消息:
QWebElement 是Qt库吗

来自老北鼻AI 的消息:
在早期版本的Qt中,确实有一个名为QWebElement的类,用于处理HTML文档的元素。然而,从Qt 5.5版本开始,QWebElement类已被标记为已弃用,并建议使用Qt WebKit模块中的QWebEngineView类来替代。

Qt WebKit模块提供了一个基于WebKit引擎的Web浏览器组件,可以用于加载和显示HTML页面。这个模块已经被Qt官方推荐使用,因为WebKit引擎相对于早期的Qt WebKit模块更加现代和强大。

对于加载和显示HTML页面,你可以使用QWebEngineView类。以下是一个简单的示例代码,展示了如何使用QWebEngineView类加载HTML页面:

#include <QApplication>
#include <QWebEngineView>int main(int argc, char *argv[])
{QApplication a(argc, argv);QWebEngineView view;view.setUrl(QUrl("http://example.com")); // 设置要加载的URLview.show(); // 显示Web浏览器组件return a.exec();
}

这段代码创建了一个QWebEngineView对象,并通过调用setUrl()方法设置要加载的URL。然后,通过调用show()方法显示Web浏览器组件,最后通过调用a.exec()来启动Qt应用程序的事件循环。

希望这个示例代码对你有帮助!

来自你的消息:
QWebEngineView 需要添加什么模块名

来自老北鼻AI 的消息:
要使用QWebEngineView类,您需要在Qt项目中添加Qt WebEngine模块。在Qt中,WebEngine模块是一个单独的模块,需要显式添加到项目中才能使用。您可以按照以下步骤添加Qt WebEngine模块:

  1. 打开项目的.pro文件(Qt项目文件)。
  2. 在文件中找到类似于"QT += …"的行。
  3. 在该行后面添加"webenginewidgets",即"QT += webenginewidgets"。
  4. 保存并重新编译您的项目。

完成上述步骤后,您就可以在项目中使用QWebEngineView类了。

来自你的消息:
webenginewidgets模块中解析html的库名称叫什么

来自老北鼻AI 的消息:
在Qt WebEngine模块中,用于解析和呈现HTML页面的库名称是Chromium Embedded Framework(CEF)。Qt WebEngine模块实际上是基于CEF的封装,以便在Qt应用程序中使用。因此,当您使用QWebEngineView类加载和显示HTML页面时,实际上是使用CEF来解析和渲染HTML内容。

来自你的消息:
QWebElement 还能用吗

来自老北鼻AI 的消息:
从Qt 5.5版本开始,QWebElement类已被标记为已弃用(deprecated)。在Qt WebEngine模块中,推荐使用QWebEngineView类和相关的WebEngine类来加载和操作HTML内容。

如果您仍然需要使用QWebElement类,可以考虑使用Qt WebKit模块,其中包含了QWebElement类和相关的WebKit类。请注意,Qt WebKit模块在Qt 5.5版本之后也被标记为已弃用,Qt官方推荐使用Qt WebEngine模块来代替。

总结而言,对于加载和操作HTML内容,建议使用Qt WebEngine模块中的QWebEngineView类和相关类,而不是使用已弃用的QWebElement类。

来自你的消息:
WebEngine 怎么使用

来自老北鼻AI 的消息:
要使用Qt WebEngine模块加载和显示HTML页面,您可以按照以下步骤进行操作:

  1. 在Qt Creator中创建一个新的Qt Widgets应用程序项目。
  2. 在项目文件(.pro)中添加对WebEngine模块的依赖:
QT += webenginewidgets
  1. 在主窗口的头文件中包含必要的头文件:
#include <QMainWindow>
#include <QWebEngineView>
  1. 在主窗口的类定义中添加一个QWebEngineView成员:
class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);private:QWebEngineView *webView;
};
  1. 在主窗口的构造函数中初始化QWebEngineView,加载并显示HTML页面:
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{webView = new QWebEngineView(this);setCentralWidget(webView);webView->load(QUrl("https://www.example.com")); // 加载指定URL的HTML页面webView->show(); // 显示Web视图
}
  1. 编译并运行您的应用程序,将会显示一个包含加载的HTML页面的窗口。

请注意,您需要确保已正确安装了Qt WebEngine模块,并且在项目文件中添加了正确的依赖项。此外,还可以使用QWebEnginePage类来执行更高级的操作,例如JavaScript交互和页面操作。

这只是一个简单的示例,您可以根据需要进行更多的自定义和功能扩展。

来自你的消息:
QT 解析html的库

来自老北鼻AI 的消息:
Qt提供了两个类来加载和解析HTML页面:QWebView和QWebEngineView。

  1. QWebView:
    QWebView是基于Webkit引擎的Qt浏览器组件,可以用于加载和显示HTML页面。要使用QWebView,首先需要在Qt项目中包含QtWebKit模块。以下是一个简单的示例代码,演示如何在Qt应用程序中加载HTML页面:
#include <QApplication>
#include <QWebView>int main(int argc, char *argv[])
{QApplication app(argc, argv);QWebView webView;webView.load(QUrl("http://www.example.com"));webView.show();return app.exec();
}
  1. QWebEngineView:
    QWebEngineView是基于Chromium引擎的Qt浏览器组件,可以加载和渲染HTML页面。要使用QWebEngineView,首先需要在Qt项目中包含QtWebEngineWidgets模块。以下是一个简单的示例代码,演示如何在Qt应用程序中使用QWebEngineView加载HTML页面:
#include <QApplication>
#include <QWebEngineView>int main(int argc, char *argv[])
{QApplication app(argc, argv);QWebEngineView webView;webView.setUrl(QUrl("http://www.example.com"));webView.show();return app.exec();
}

请注意,加载和解析HTML页面可能涉及到网络请求,因此需要确保您的Qt项目已经正确配置了网络访问权限。如果您使用Qt Creator进行开发,可以在项目文件(.pro)中添加以下行来允许网络访问:

QT += webkitwidgets  // for QWebView
或者
QT += webenginewidgets  // for QWebEngineView

希望这个回答对您有帮助!

来自你的消息:
C++解析html节点库

来自老北鼻AI 的消息:
你可以使用一些第三方库来解析HTML节点,其中比较常用的是libxml2和Gumbo Parser。

  1. libxml2:这是一个功能强大的XML和HTML解析库,可以在C++中使用。它提供了一系列的API来解析和操作HTML节点。你可以从libxml2的官方网站下载并安装该库。以下是一个简单的示例代码,展示如何使用libxml2解析HTML节点:
#include <libxml/HTMLparser.h>void parseHTML(const char* html) {htmlDocPtr doc = htmlReadMemory(html, strlen(html), NULL, NULL, HTML_PARSE_NOWARNING==来自你的消息:==
Gumbo Parser==来自老北鼻AI 的消息:==
Gumbo Parser是另一个流行的HTML解析库,它是用C编写的,并提供了C++绑定。它可以解析HTML,并将其转换为DOM树,以便于遍历和提取节点信息。你可以从Gumbo Parser的GitHub页面下载并使用该库。以下是一个简单的示例代码,展示如何使用Gumbo Parser解析HTML节点:```cpp
#include <gumbo.h>void parseHTML(const char* html) {GumboOutput* output = gumbo_parse(html);// 遍历DOM树// ...gumbo_destroy_output(&kGumboDefaultOptions, output);
}

你可以通过遍历DOM树的方式来访问和提取HTML节点的信息。例如,你可以使用output->root来获取根节点,然后使用GumboNode结构体的成员来访问节点的标签名、属性和子节点等信息。

请注意,这只是一个简单的示例代码,你可以根据你的具体需求进行相应的扩展和修改。在使用Gumbo Parser之前,请确保你已经理解和熟悉了它的API和用法。

来自你的消息:
gumbo-parser 有windows 版本的吗

来自老北鼻AI 的消息:
是的,Gumbo Parser也支持Windows平台。你可以在Gumbo Parser的GitHub页面的发布页面上找到预编译的Windows版本。

在发布页面中,你可以找到以".zip"或".tar.gz"为扩展名的压缩包,下载并解压缩后,你将找到包含Gumbo Parser库文件的文件夹。在你的C++项目中,你可以将这些库文件添加到你的项目中,并链接它们,以便在Windows平台上使用Gumbo Parser。

请注意,确保选择与你的C++项目相匹配的Gumbo Parser版本,例如,选择与你的编译器相兼容的版本(32位或64位),并根据你的项目需求选择合适的版本(静态库或动态库)。

一旦你设置好了Gumbo Parser库,你就可以按照前面提供的示例代码来解析HTML节点了。记得在编译时链接Gumbo Parser库,并将头文件路径添加到你的编译器配置中。

来自你的消息:
gumbo-query 编译失败

来自老北鼻AI 的消息:
如果你在编译Gumbo Query时遇到了问题,可能是因为缺少依赖项或编译配置不正确。以下是一些可能的解决方案:

  1. 确保你已经正确安装了Gumbo Parser,并将其包含目录和库目录添加到你的编译器配置中。Gumbo Query是建立在Gumbo Parser之上的,所以你需要先正确安装并配置Gumbo Parser。

  2. 检查你的编译器配置是否正确包含了Gumbo Query的源文件和头文件。确保将Gumbo Query的头文件包含到你的源代码中,以便正确使用Gumbo Query的功能。

  3. 检查你的编译器命令是否正确。如果你使用的是GCC或Clang编译器,可以使用类似以下的命令来编译Gumbo Query的源文件:

    g++ -o output_file -I/path/to/gumbo_query/include -L/path/to/gumbo_query/lib source_file.cpp -lgumbo_query
    

    上述命令中,-I选项用于指定Gumbo Query的头文件目录,-L选项用于指定Gumbo Query的库目录,-lgumbo_query用于链接Gumbo Query库。

  4. 确保你的编译器支持C++11标准或更高版本。Gumbo Query使用了一些C++11的特性,所以确保你的编译器支持并启用了C++11。

如果你能提供更详细的编译错误信息,我可能可以给出更具体的解决建议。

来自你的消息:
gumbo-parser 用法

来自老北鼻AI 的消息:
Gumbo Parser是一个用于解析HTML文档的开源库。它可以将HTML文档解析为一个抽象的DOM树,并提供了一些API来遍历和操作这个DOM树。

以下是一个简单的示例代码,展示了如何使用Gumbo Parser来解析一个HTML文档:

#include <gumbo.h>
#include <stdio.h>// 递归遍历DOM树
void traverse_node(GumboNode* node) {// 如果是文本节点,打印文本内容if (node->type == GUMBO_NODE_TEXT) {printf("%s\n", node->v.text.text);}// 递归处理子节点if (node->type == GUMBO_NODE_ELEMENT) {GumboElement* element = &node->v.element;for (int i = 0; i < element->children.length; ++i) {traverse_node(static_cast<GumboNode*>(element->children.data[i]));}}
}int main() {// 创建Gumbo解析器GumboOutput* output = gumbo_parse("<html><body><h1>Hello, World!</h1></body></html>");// 遍历DOM树traverse_node(output->root);// 释放解析器内存gumbo_destroy_output(&kGumboDefaultOptions, output);return 0;
}

上述示例代码首先使用gumbo_parse函数解析一个HTML文档字符串,返回一个GumboOutput结构体。然后使用traverse_node函数来遍历DOM树,打印文本节点的内容。最后,使用gumbo_destroy_output函数释放解析器的内存。

请注意,在使用Gumbo Parser之前,你需要正确设置和配置Gumbo Parser库,以便在编译时正确地链接和包含相关的头文件路径。

来自你的消息:
Gumbo Query 用法

来自老北鼻AI 的消息:
Gumbo Query是Gumbo Parser库的一个扩展,它提供了一种简单的方式来查询和操作解析后的HTML文档。你可以使用Gumbo Query来选择特定的元素、获取其属性值或文本内容,以及进行一些基本的DOM操作。

首先,确保你已经正确地安装了Gumbo Parser库和Gumbo Query扩展。接下来,你可以按照以下步骤使用Gumbo Query:

  1. 导入所需的库和头文件:
#include <gq.h>
  1. 解析HTML文档并创建GumboQueryDocument对象:
GumboOutput* output = gumbo_parse("<html>...</html>");
GumboQueryDocument* doc = gumbo_query_document_new(output);
  1. 使用Gumbo Query选择元素:
GumboQuerySelection* selection = gumbo_query(doc, "selector");

这里的"selector"是你选择元素的CSS选择器表达式。例如,如果你想选择所有的div元素,可以使用"div"作为选择器。你还可以使用类名、ID、属性等进行更具体的选择。

  1. 遍历选择的元素并获取属性或文本内容:
for (unsigned int i = 0; i < selection->length; ++i) {GumboQueryNode* node = selection->data[i];// 获取元素的属性值const char* attribute_value = gumbo_get_attribute(node->node, "attribute_name");// 获取元素的文本内容const char* text_content = gumbo_get_text_content(node->node);
}

在上面的示例中,我们使用了gumbo_get_attribute函数来获取元素的特定属性值,以及gumbo_get_text_content函数来获取元素的文本内容。

  1. 最后,记得释放内存:
gumbo_destroy_output(&kGumboDefaultOptions, output);
gumbo_query_selection_destroy(selection);
gumbo_query_document_destroy(doc);

这样,你就完成了使用Gumbo Query解析和操作HTML文档的基本步骤。

请注意,使用Gumbo Query之前,你需要正确设置和配置Gumbo Parser库。确保你已经正确地安装了Gumbo Parser库,并在编译时链接所需的库文件。

希望这些信息对你有帮助!如果你还有其他问题,请随时提问。

不得不说这个老北鼻CharGpt做的越来越溜了,回答的代码都能直接复制使用了

二、过程中所遇到的问题

gumbo-parser库是C语言开发的

[gumbo-parse]是C语法开发的,Src的文件也不能直接带入C++或qt项目中,不过[gumbo-parse]也提供的C++版本库gumbo-query

gumbo-query库是C++开发的

gumbo-query确实是C++开发,Src中的文件也能直接包含进项目中,但是缺少[gumbo-parse]中的部分库文件,而要编译好gumbo-query需要gumbo-parser编译好的库文件

gumbo-parser 不支持windows环境编译

[gumbo-parse]在github上的源码只有configure文件没有CMakeLists文件,这就意味着在windows系统上cmake一般是编译不了了。整了大半天这不是扯蛋吗,总不能又重新安装个linux系统 来编译源码。

三、解决问题

整个[gumbo-parse]代码量不多,于是我想干脆把[gumbo-parse]项目的部分代码移植到[gumbo-query]上,手动转成C++格式,
在被一系列的问题整得快要砸电脑的时候,
突然发现一个大佬已经做好了
c++解析html
还整理好直接传github了,好人一生平安
https://github.com/cejutue/cjhtmlparser
将源码中gumbo-parser目录下的文件直接以pri的方式带入项目中,正常运行,

	//char * HTMLS;CDocument doc;doc.parse(HTMLS);CSelection p = doc.find("table");qDebug()<<"[code]"<< p.nodeNum();for(int i= 0 ;i<p.nodeNum();i++){CNode node = p.nodeAt(i);qDebug()<<"[code] text: "<<QString::fromUtf8(node.text().c_str());}

相关文章:

使用老北鼻CharGPT对话查询 Qt/C++ 使用gumbo-parse解析加载的html全过程

记下使用老北鼻CharGPT对话查询 Qt/C解析html网页全过程。 [gumbo-parse] Gumbo是HTML5解析算法作为纯C99库实现&#xff0c;没有外部依赖性。它被设计为其他工具和库的构建模块&#xff0c;比如linters、验证器、模板语言、重构和分析工具。详细说明参考original-README.md 目…...

​ iOS App Store上传项目报错 缺少隐私政策网址(URL)解决方法

一、问题如下图所示&#xff1a; ​ 二、解决办法&#xff1a;使用Google浏览器&#xff08;翻译成中文&#xff09;直接打开该网址 https://www.freeprivacypolicy.com/free-privacy-policy-generator.php 按照要求填写APP信息&#xff0c;最后将生成的网址复制粘贴到隐私…...

设计模式第一课-单例模式(懒汉模式和饿汉模式)

单例模式 个人理解&#xff1a;单例模式实际就是通过类加载的方式获取到一个对象&#xff0c;并且保证这个对象在使用中只有一个&#xff0c;不允许再次被创建 一、懒汉模式 1、懒汉模式的基础写法 代码解释&#xff1a; &#xff08;1&#xff09;、编写LazySingleton类的…...

Yaml文件详解

目录 1、Yaml文件详解 2、详解k8s中的port 3、Service yaml 4、Deployment yaml文件详解 5、Pod yaml文件详解 1、Yaml文件详解 Kubernetes 支持 YAML 和 JSON 格式管理资源对象 JSON 格式&#xff1a;主要用于 api 接口之间消息的传递 YAML 格式&#xff1a;用于配置和管…...

【题解 线段树】[蓝桥杯 2022 省 A] 选数异或

题目描述&#xff1a; [蓝桥杯 2022 省 A] 选数异或 题目描述 给定一个长度为 n n n 的数列 A 1 , A 2 , ⋯ , A n A_{1}, A_{2}, \cdots, A_{n} A1​,A2​,⋯,An​ 和一个非负整数 x x x, 给定 m m m 次查询, 每次询问能否从某个区间 [ l , r ] [l, r] [l,r] 中选择两…...

宠物喂食器方案智能开发设计

现在年轻人特别是在一、二、三线城市的&#xff0c;工作节奏快、加班、出差、旅游成常态&#xff0c;无法经常在宠物身边照看&#xff0c;宠物智能自动喂食机能够解放宠主的双手和解决不能长时间在处的无奈&#xff0c;很好地满足了年轻宠物主照顾宠物的需求。宠物主和宠物都需…...

chatgpt综述阅读理解

Summary of ChatGPT-Related research and perspective towards the future of large language models 摘要 本文总结了语言模型在遵循指令和人类反馈方面的相关工作&#xff0c;包括训练语言模型来理解指令并按照指令执行任务&#xff0c;以及提高语言模型的性能和理解能力的…...

XCTF-RSA-2:baigeiRSA2、 cr4-poor-rsa

baigeiRSA2 题目描述 import libnum from Crypto.Util import number from functools import reduce from secret import flagn 5 size 64 while True:ps [number.getPrime(size) for _ in range(n)]if len(set(ps)) n:breake 65537 n reduce(lambda x, y: x*y, ps) m …...

js 根据word文档模板导出内容

一、创建word导出模板 1、本地创建一个test.docx 2、将最终需要的文档内容及样式编辑完成(图1) 3、将所需动态值的位置,替换为变量参数(图2) 注: 动态值书写 图1 图2 模板值的书写要求 二、项目中使用 1、安装依赖 npm install docxtemplater-image-module-free --save n…...

AIGC | 如何用“Flow”,轻松解决复杂业务问题

随着LLM&#xff08;大语言模型&#xff09;的爆火&#xff0c;不少企业都在寻找通过LLM解决企业业务问题的方法&#xff0c;以达到降本增效的效果。但是&#xff0c;当面对较为复杂的业务问题&#xff08;如&#xff1a;背景资料多、问题分类多、条件判断复杂、涉及模块多等&a…...

多级菜单 树结构 排序 前端 后端 java

目录 省流&#xff1a; 正文&#xff1a; v1.0版 前端传的值&#xff1a; 后端代码&#xff1a; v2.0版 v3.0版 省流&#xff1a; 前端提交过来整个树即可。 给整个树进行sort。代码如下&#xff1a; public static void sort(List<Node> tree){int i 0;for…...

LAN-Free在数据备份时的应用与优势

在灾备领域中&#xff0c;常见的备份架构有LAN、LAN-Free和Server-Free备份&#xff0c;其中LAN备份架构图见图1&#xff0c;LAN-Free备份架构图见图2&#xff0c;Server-Free备份架构图见图3&#xff0c;途中红色箭头为备份数据流量走向&#xff1a; 图 1 图 2 图 3 从图1、图…...

HTML 文档声明和语言设置

HTML 文档声明 DOCTYPE 文档类型声明&#xff0c;用于告诉浏览器的解析器&#xff0c;该以那种 HTML 版本来解析这个文件。 HTML 5 版本声明 <!DOCTYPE html>XHTML 1.0 严格版声明 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http:/…...

【C++基础知识学习笔记】精华版(复习专用)

常用语法 函数重载(Overload) 规则: 函数名相同 参数个数不同、参数类型不同、参数顺序不同 注意: 返回值类型与函数重载无关 调用函数时,实参的隐式类型转换可能会产生二义性 默认参数 C++ 允许函数设置默认参数,在调用时可以根据情况省略实参。规则如下: 默认参数只能…...

探索ChatGPT在学术写作中的应用与心得

随着人工智能的迅猛发展&#xff0c;ChatGPT作为一种强大的自然语言处理模型&#xff0c;逐渐在学术界引起了广泛的关注。本文将探讨ChatGPT在学术写作中的应用&#xff0c;并分享使用ChatGPT进行学术写作时的一些经验和心得。 01 — ChatGPT在学术写作中的应用 1.文献综述和…...

Android:怎么学习才能更好的进大厂呢?

怎么学习才能更好的进大厂呢&#xff1f; 很多朋友都在问这个问题。 其实没有什么特别的技巧&#xff0c;就是依靠自己的毅力和决心。一天做不到&#xff0c;就一个月&#xff1b;一个月做不到&#xff0c;就一年。只要有决心&#xff0c;无论学历或资历如何&#xff0c;都不是…...

CSS标点符号换行问题

最近遇到一个奇怪的现象,元素中中文文本正常显示,但是加了一堆符号后中文文本居然换行了. div{width: 200px;border: 1px solid blue;word-break: break-all;} <div>文本</div>经过研究发现&#xff0c;因为标点符号不允许出现在行首和行尾&#xff0c;连带着符号…...

jdbc Preparestatement防止SQL注入的原理

2023-10-28T03:37:11.264132Z 2 Execute select * from users where username liulemon and password \ or \1\ 1\ 可以看到这一行&#xff0c;预编译时&#xff1f;变成了转义字符 useServerPrepStmtstrue加上这句才能预编译...

如何控制 LLM 的输出格式和解析其输出结果?

现在很多人对于如何使用像 ChatGPT 这样的 LLM 已经比较有经验了&#xff0c;可以使用各种不同的 Prompt 得到自己想要的结果。但有时候我们的使用场景不局限于手动操作&#xff0c;而是需要结合程序去调用 API&#xff0c;并且解析 API 的返回结果&#xff0c;从而实现一些自动…...

【Linux】 ps 命令使用

ps &#xff08;英文全拼&#xff1a;process status&#xff09;命令用于显示当前进程的状态&#xff0c;类似于 windows 的任务管理器。 语法 ps [选项] ps命令 -Linux手册页 著者 ps最初由布兰科兰克斯特撰写<lankestefwi.uva.nl>。迈克尔K约翰逊<johnsonmred…...

C++二分查找算法的应用:长度递增组的最大数目

本文涉及的基础知识点 二分查找 题目 给你一个下标从 0 开始、长度为 n 的数组 usageLimits 。 你的任务是使用从 0 到 n - 1 的数字创建若干组&#xff0c;并确保每个数字 i 在 所有组 中使用的次数总共不超过 usageLimits[i] 次。此外&#xff0c;还必须满足以下条件&…...

提示3D标题编辑器仍在运行怎么解决,以及3D标题编辑器怎么使用

在进行视频剪辑时&#xff0c;尤其是剪辑一些带有文字的开场视频&#xff0c;一般都会使用具有立体效果的3D标题&#xff0c;这样制作出来的视频效果不仅好看&#xff0c;还非常的炫酷&#xff0c;但是对于一些刚刚开始接触视频剪辑的小伙伴来说&#xff0c;可能对3D标题还不是…...

1. PPT高效初始化设置

1. PPT高效初始化设置 软件安装&#xff1a;Office 2019 主题和颜色 颜色可以在白天与黑夜切换&#xff0c;护眼 切换成了黑色 撤回次数 撤回次数太少&#xff0c;只有20次怎么办 自动保存 有时忘记保存就突然关闭&#xff0c;很需要一个自动保存功能 图片压缩 图…...

el-cascader级联选择器选中一个全选中问题

问题 只选中一个却把同级全选中 解决 :props中添加label、value、children属性 label、value、children属性值需要和后端返回的集合中的字段名保持一致 后端返回数据&#xff1a;...

Opencascad(C++)-创建自定义坐标系

文章目录 1、前言2、在Opencascad中显示小的坐标系3、在Opencascad中创建自定义的坐标系 1、前言 在Opencascad开发时&#xff0c;在view中可以显示小的坐标系&#xff0c;但是有时我们需要在建模时创建基准坐标系&#xff0c;当然可以作为工件坐标系也可以作为基准坐标系。本…...

MySQL数据库入门到大牛_01_数据库概述

文章目录 1. 为什么要使用数据库2. 数据库与数据库管理系统2.1 数据库的相关概念2.2 数据库与数据库管理系统的关系2.3 常见的数据库管理系统排名(DBMS)2.4 常见的数据库介绍 3. MySQL介绍3.1 概述3.2 MySQL发展史重大事件3.3 关于MySQL 8.03.4 Why choose MySQL?3.5 Oracle v…...

Web - Servlet详解

目录 前言 一 . Servlet简介 1.1 动态资源和静态资源 1.2 Servlet简介 二 . Servlet开发流程 2.1 目标 2.2 开发过程 三 . Servlet注解方式配置 ​编辑 四 . servlet生命周期 4.1 生命周期简介 4.2 生命周期测试 4.3 生命周期总结 五 . servlet继承结构 5.1 ser…...

postgresql 触发器如何生成递增序列号,从1开始,并且每天重置

大家好&#xff0c;我是三叔&#xff0c;许久不见&#xff0c;这期给大家介绍一下笔者在开发中遇到的业务处理&#xff1a;pgsql 创建触发器生成每日递增序列&#xff0c;并且第二天重置&#xff0c;根据不同的用户进行不同的控制。 1.创建生成递增序列的 table 表 -- 创建us…...

“第五十九天”

这是昨天那道题&#xff0c;这个后面自己的处理思路还是差了点&#xff0c;这道题关键感觉就是对进位的处理的&#xff0c;由于进位的存在&#xff0c;所以处理数据的时候只能从最低位开始&#xff0c;我一开始是从高位处理的&#xff0c;而且后面越来越迷&#xff0c;这个点一…...

IDEA集成Docker插件打包服务镜像与运行【附Docker命令汇总】

Docker官网 Docker官网&#xff1a;https://www.docker.com/ Docker Hub官网&#xff1a;http://hub.docker.com/ 什么是Docker Docker 是一个开源的容器引擎&#xff0c;可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者和系统管理员在笔记本上编…...