access数据库做网站/seo是什么职业

access数据库做网站,seo是什么职业,公司做网站要多长时间审核,贵港市住房和城乡规划建设委员会网站UDP应用1:翻译软件 本篇介绍 本篇基于UDP编程接口基本使用中封装的服务器和客户端进行改写,基本功能如下: 从配置文件dict.txt读取到所有的单词和意思客户端向服务端发送英文服务端向客户端发送英文对应的中文意思 配置文件内容 下面的内…

UDP应用1:翻译软件

本篇介绍

本篇基于UDP编程接口基本使用中封装的服务器和客户端进行改写,基本功能如下:

  1. 从配置文件dict.txt读取到所有的单词和意思
  2. 客户端向服务端发送英文
  3. 服务端向客户端发送英文对应的中文意思

配置文件内容

下面的内容是本次实现使用的配置文件

apple: 苹果
banana: 香蕉
cat: 猫
dog: 狗
book: 书
pen: 笔
happy: 快乐的
sad: 悲伤的
run: 跑
jump: 跳
teacher: 老师
student: 学生
car: 汽车
bus: 公交车
love: 爱
hate: 恨
hello: 你好
goodbye: 再见
summer: 夏天
winter: 冬天

设计翻译软件

根据上面对功能描述,下面对功能实现进行具体分析

设计字典类

既然是字典类,那么对应的就需要一个便于查询的结构,本次以哈希表为例

因为服务端主要是接收客户端的数据,所以服务端本身不直接处理翻译功能,而是交给一个函数进行处理,但是如果这个函数直接裸露在外部就会导致字典本身和翻译函数分开,所以本次考虑将翻译函数作为字典类的成员函数

需要注意,本次默认使用的配置文件中英文单词和中文意思使用的是一个冒号和空格进行分割,即: ,可以考虑让用户自己提供配置文件和分割符,所以类基本结构如下:

// 默认配置文件位置和配置文件
const std::string default_path = "./";
const std::string default_file = "dict.txt";// 默认分隔符
const std::string default_sep = ": ";class Dictionary
{
public:Dictionary(const std::string &path = default_path, const std::string &file = default_file, const std::string &sep = default_sep): _path(path), _file(file), _sep(sep){// 1. 读取配置文件// 2. 分割字符串并将key和value添加到哈希表}// 翻译std::string translate(const std::string &word){}~Dictionary(){}private:std::unordered_map<std::string, std::string> _dict; // 字典哈希表std::string _path;                                  // 配置文件路径std::string _file;                                  // 配置文件std::string _sep;                                   // 分隔符
};

读取配置文件并分割

首先是读取配置文件,本次考虑将从配置文件中读取到的字符串通过分割成keyvalue依次存入到一个哈希表中。并且因为是字典类,所以考虑在创建字典类对象时就完成前面的读取和存储操作

根据上面的思路需要考虑两个步骤:

  1. 获取并读取配置文件
  2. 分割字符串获取到keyvalue存储到哈希表

读取配置文件的操作就是打开指定的文件并读取其中的内容,在本次配置文件的内容中,一行为一组数据,所以在读取文件内容时需要按照行读取

读到一行数据后,需要将该行数据按照指定的分隔符进行切割存入keyvalue中,这里有两种思路:

  1. 自行实现分割逻辑
  2. 使用库函数

本次考虑使用第一种思路,那么对于分割逻辑来说,基本思路如下:

  1. 找到:第一次出现的位置,以该位置为终点,以字符串第一个字符为起点,切出第一个子串作为key
  2. 找到分隔符的下一个字符,以该位置为起点,以字符串结尾为终点,切出第二个子串作为value

将获取到的keyvalue存入到哈希表中

重复上面的步骤直到读取完毕文件,将文件关闭,代码如下:

// 1. 读取配置文件
std::string dictPath = default_path + default_file;
// 1.1 打开文件
std::fstream out(dictPath);// 2. 分割字符串并将key和value添加到哈希表
std::string message;
while (std::getline(out, message))
{// 分割字符串auto word_end = message.find(_sep, 0);std::string key = message.substr(0, word_end);std::string value = message.substr(word_end + sep.size(), message.size());// 存储到哈希表中_dict.insert({key, value});
}out.close();

翻译函数

所谓翻译就是在哈希表中根据指定字符串查找对应的value并返回,基本代码如下:

// 翻译
std::string translate(const std::string &word)
{auto pos = _dict.find(word);if (pos == _dict.end())return "无指定单词对应的中文意思";return pos->second;
}

修改服务端类

本次服务端做的任务就是接收客户端发送的数据,再调用字典类的翻译函数将翻译结果返回给客户端,所以实际上需要修改的就是两点:

  1. 服务端需要拿到翻译函数
  2. 执行翻译功能并返回结果给客户端

首先修改第一点,因为服务端本身没有翻译函数,所以需要外界传递,此时可以考虑在构造服务端时要求外部传递翻译函数,对应地服务端就需要一个成员用于接收这个函数:

using task_t = std::function<std::string(const std::string &)>;class UdpServer
{
public:UdpServer(task_t t, uint16_t port = default_port): // ...,_translate(t){// ...}// ...
private:// ...task_t _translate; // 翻译函数
};

需要注意,在构造函数中,没有默认参数的形式参数一定要写在有默认参数的形式参数之前,具体原因见C++中的缺省参数
接着修改第二点,执行翻译函数并将结果返回给客户端,这一步主要涉及到服务端的任务部分。在上一节中,主要任务是将客户端发送的信息再发给客户端,这次就是调用翻译函数再将结果返回给客户端,所以代码如下:

// 启动服务器
void start()
{if (!_isRunning){_isRunning = true;while (true){// 1. 接收客户端信息// ...if (ret > 0){// ...// 翻译std::string ret = _translate(buffer);ssize_t n = sendto(_socketfd, ret.c_str(), ret.size(), 0, &temp, temp.getLength());// ...}}}
}

修改服务端主函数

主要修改的地方就是创建服务端对象部分,因为需要传递一个翻译任务函数,所以需要先创建一个字典类对象,再调用字典类对象中的翻译方法,需要注意的是,不能直接将字典类的翻译函数作为参数传递给服务端对象的构造函数,因为该函数的参数列表除了需要显示传递的字符串对象外,还存在一个字典类对象,这并不符合服务端类构造函数要求的函数类型,这里提供两个方法:

  1. 使用绑定,将字典类对象作为固定参数绑定给翻译函数
  2. 使用lambda表达式,在表达式中调用翻译函数

即:

=== “绑定”

// 创建字典类对象
std::shared_ptr<Dictionary> dict;
// 创建UdpServerModule对象
std::shared_ptr<UdpServer> udp_server = = std::make_shared<UdpServer>(std::bind(&Dictionary::translate, dict.get(), std::placeholders::_1));

=== “lambda表达式”

// 创建字典类对象
std::shared_ptr<Dictionary> dict;
// 创建UdpServerModule对象
std::shared_ptr<UdpServer> udp_server = = std::make_shared<UdpServer>([&dict](const std::string word){ dict->translate(word); 
});

测试

以绑定为例,服务端整体代码如下:

#include "udp_server.hpp"
#include "dictionary.hpp"
#include <memory>using namespace UdpServerModule;
using namespace DictionaryModule;int main(int argc, char *argv[])
{// 创建字典类对象std::shared_ptr<Dictionary> dict;// 创建UdpServerModule对象std::shared_ptr<UdpServer> udp_server;if (argc == 1){// 绑定udp_server = std::make_shared<UdpServer>(std::bind(&Dictionary::translate, dict.get(), std::placeholders::_1));}else if (argc == 2){// std::string ip = argv[1]; 去除uint16_t port = std::stoi(argv[1]);udp_server = std::make_shared<UdpServer>(std::bind(&Dictionary::translate, dict.get(), std::placeholders::_1), port);}else{LOG(LogLevel::ERROR) << "错误使用,正确使用:" << argv[0] << " 端口(或者不写)";exit(4);}udp_server->start();return 0;
}

客户端代码保持和上一节一样,此处不再展示,运行结果如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/72193.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jeecg-Boot 开放接口开发实战:在 Jeecg-Boot 的jeecg-system-biz中添加一个controller 实现免鉴权数据接口

Jeecg-Boot 开放接口开发实战&#xff1a;在 Jeecg-Boot 的jeecg-system-biz中添加一个controller 实现免鉴权数据接口 一、场景需求分析 在微服务架构中&#xff0c;常需要快速实现以下两类接口&#xff1a; 开放接口&#xff1a;无需登录即可访问&#xff08;如数据查询、…

C++ ++++++++++

初始C 注释 变量 常量 关键字 标识符命名规则 数据类型 C规定在创建一个变量或者常量时&#xff0c;必须要指定出相应的数据类型&#xff0c;否则无法给变量分配内存 整型 sizeof关键字 浮点型&#xff08;实型&#xff09; 有效位数保留七位&#xff0c;带小数点。 这个是保…

BKA-CNN基于黑翅鸢算法优化卷积神经网络的数据多特征分类预测Matlab

BKA-CNN基于黑翅鸢算法优化卷积神经网络的数据多特征分类预测Matlab 目录 BKA-CNN基于黑翅鸢算法优化卷积神经网络的数据多特征分类预测Matlab分类效果基本介绍BKA-CNN基于黑翅鸢算法优化卷积神经网络的数据多特征分类预测一、引言1.1、研究背景和意义1.2、研究现状1.3、研究目…

SOLID Principle基础入门

(Robert C. Martin (Uncle Bob)) 什么是SOLID原则&#xff1f; SOLID原则是面向对象编程&#xff08;OOP&#xff09;中编写高质量代码的指导方针。实际上&#xff0c;即使不使用SOLID原则&#xff0c;仅通过类、继承、封装和多态性&#xff0c;也可以让程序正常运行。那么为…

轻松实现语音生成:GPT-SoVITS V2整合包的远程访问操作详解

文章目录 前言1.GPT-SoVITS V2下载2.本地运行GPT-SoVITS V23.简单使用演示4.安装内网穿透工具4.1 创建远程连接公网地址 5. 固定远程访问公网地址 前言 今天要给大家安利一个绝对能让你大呼过瘾的声音黑科技——GPT-SoVITS&#xff01;这款由花儿不哭大佬精心打造的语音克隆神…

Python线程池知多少

目录 目标 Python版本 官方文档 概述 线程池 实战 创建线程池的基本语法 批量提交任务 生产者&消费者模型 目标 掌握线程池的基本概念和使用方法。 Python版本 Python 3.9.18 官方文档 concurrent.futures — Launching parallel taskshttps://docs.python.org/3…

(转)SpringBoot和SpringCloud的区别

&#xff08;转&#xff09;SpringBoot和SpringCloud的区别&#xff1a;

阿里云音频算法岗内推

1、视频云直播、连麦&#xff0c;点播&#xff0c;短视频&#xff0c;媒体生产与处理等服务相关的实时/非实时的音频分析和处理&#xff1b; 2、音频处理算法&#xff0c;包括多场景降噪、自动增益控制、回声消除等&#xff1b; 3、音频特效算法研发&#xff0c;包括变调变速…

如何使用DeepSeek辅助准备面试

前言 又到了金三银四的时间点了。每年的这个时间点都会出现无数的机遇和机会&#xff0c;但是如何准备面试&#xff0c;应该准备哪些面试题&#xff0c;如何查漏补缺我们的技术面的短板&#xff0c;这是我们每次准备面试的时候&#xff0c;都会遇见的问题。在今年&#xff0c;…

AI数据分析:用DeepSeek做数据清洗

在当今数据驱动的时代&#xff0c;数据分析已成为企业和个人决策的重要工具。随着人工智能技术的快速发展&#xff0c;AI 驱动的数据分析工具正在改变我们处理和分析数据的方式。本文将着重介绍如何使用 DeepSeek 进行数据清洗。 数据清洗是数据分析的基础&#xff0c;其目的是…

腾讯2025年软件测试面试题

以下是基于腾讯等一线互联网公司软件测试岗位的面试趋势和技术要求,025年出现的软件测试面试题。这些问题涵盖了基础知识、自动化测试、性能测试、安全测试、编程能力等多个方面,供参考和准备。 一、基础知识 软件测试的基本概念

数据结构(陈越,何钦铭) 第四讲 树(中)

4.1 二叉搜索树 4.1.1 二叉搜索树及查找 Position Find(ElementTyoe X,BinTree BST){if(!BST){return NULL;}if(X>BST->Data){return Find(X,BST->Right)}else if(X<BST->Data){return Find(X,BST->Left)}else{return BST;} } Position IterFind(ElementTyp…

学习路之PHP --TP6异步执行功能 (无需安装任何框架)

学习路之PHP --异步执行功能 &#xff08;无需安装任何框架&#xff09; 简介一、工具类二、调用三、异步任务的操作四、效果&#xff1a; 简介 执行异步任务是一种很常见的需求&#xff0c;如批量发邮箱&#xff0c;短信等等执行耗时任务时&#xff0c;需要程序异步执行&…

STM32之影子寄存器

预分频寄存器计数到一半的时候&#xff0c;改变预分频值&#xff0c;此时不会立即生效&#xff0c;会等到计数完成&#xff0c;再从影子寄存器即预分频缓冲器里装载修改的预分频值。 如上图&#xff0c;第一行是内部时钟72M&#xff0c;第二行是时钟使能&#xff0c;高电平启动…

Deepseek API接入IDE【VSCode Cline Cursor ChatBox Deepseek deepseek-reasoner】

本文解决以下疑难杂症: 使用deepseek的最新接模型接入ide 使用deepseek的最新接模型接入vscode 使用deepseek的最新接模型接入vscode中的Cline 使用deepseek的最新接模型接入Cline 使用deepseek的最新接模型接入ChatBox 使用cursor接入Deepseek官方的的deepseek-reasoner…

在Linux桌面上创建Idea启动快捷方式

1、在桌面新建idea.desktop vim idea.desktop [Desktop Entry] EncodingUTF-8 NameIntelliJ IDEA CommentIntelliJ IDEA Exec/home/software/idea-2021/bin/idea.sh Icon/home/software/idea-2021/bin/idea.svg Terminalfalse TypeApplication CategoriesApplication;Developm…

2021-05-27 C++找出矩阵数组中值最大的元素和它在数组中的位置

缘由各位大佬&#xff0c;这个应该怎么做_编程语言-CSDN问答 void 找出数组中值最大的元素和它在数组中的位置() {//缘由https://ask.csdn.net/questions/7436585?spm1005.2025.3001.5141int a[4][4], aa 0, aaa 0, d 0, x 0;while (aa < 4 && aaa < 4)std…

DeepSeek开源周Day2:DeepEP - 专为 MoE 模型设计的超高效 GPU 通信库

项目地址&#xff1a;https://github.com/deepseek-ai/DeepEP 开源日历&#xff1a;2025-02-24起 每日9AM(北京时间)更新&#xff0c;持续五天 (2/5)&#xff01; ​ ​ 引言 在大模型训练中&#xff0c;混合专家模型&#xff08;Mixture-of-Experts, MoE&#xff09;因其动…

HTTP学习——————(四)TLS等加密算法

前文学习&#xff1a; 一、二、三 学习来源网站 &#xff1a; 极客时间 TLS 目的&#xff1a;身份验证、保密性、完整性 解决问题&#xff1a; Record记录协议——对称加密 Handshake握手协议———1.验证通讯双方身份 2.交换加解密安全套件 3.协商加密参数 有密钥交换算法…

FastExcel vs EasyExcel vs Apache POI:三者的全面对比分析

一、核心定位与历史沿革 Apache POI&#xff08;1990s-&#xff09; 作为Java生态中最古老的Excel处理库&#xff0c;提供对.xls/.xlsx文件的全功能支持。其核心价值在于对Excel规范的完整实现&#xff0c;包括单元格样式、公式计算、图表操作等深度功能。但存在内存消耗大&…