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

3.1 C/C++ 使用字符与指针

C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存等底层资源,对于初学者来说可能会有一定的难度。

strtok 字符串切割: 将指定的一段字符串,根据指定的分隔符进行切割,切割后分别存入到新数组.

#include <stdio.h>int main(int argc, char* argv[])
{char str[] = "hello,lyshark,welcome";char *ptr;ptr = strtok(str, ",");while (ptr != NULL){printf("切割元素: %s\n", ptr);ptr = strtok(NULL, ",");}char str[] = "192.168.1.1";char *ptr;char *SubAddr[4] = {0};ptr = strtok(str, ".");for (int x = 0; x < 4; x++){SubAddr[x] = ptr;ptr = strtok(NULL, ".");}for (int x = 0; x < 4; x++)printf("%s \n", SubAddr[x]);system("pause");return 0;
}

strcpy 字符串拷贝: 将一个字符串数组中的数据拷贝到新的字符串空间中,拷贝知道遇到结束符为止.

#include <stdio.h>
#include <string.h>int main(int argc, char* argv[])
{char Array[] = "hello lyshark";char tmp[100];// 学习strcpy函数的使用方式if (strcpy(tmp, Array) == NULL)printf("从Array拷贝到tmp失败\n");elseprintf("拷贝后打印: %s\n", tmp);// 清空tmp数组的两种方式for (unsigned int x = 0; x < strlen(tmp); x++)tmp[x] = ' ';memset(tmp, 0, sizeof(tmp));// 学习strncpy函数的使用方式if (strncpy(tmp, Array, 3) == NULL)printf("从Array拷贝3个字符到tmp失败\n");elseprintf("拷贝后打印: %s\n", tmp);system("pause");return 0;
}

strcat 字符串连接: 将由src指向的字节串的副本,追加到由dest指向的以空字节终止的字节串的末尾.

#include <stdio.h>
#include <string.h>int main(int argc, char* argv[])
{char str1[50] = "hello ";char str2[50] = "lyshark!";char * str = strcat(str1, str2);printf("字符串连接: %s \n", str);str = strcat(str1, " world");printf("字符串连接: %s \n", str);str = strncat(str1, str2, 3);printf("字符串连接: %s \n", str);system("pause");return 0;
}

strcmp 字符串对比: 对比两个字符串是否一致,如果一致返回真否则返回假,此外如需要对比指定长度,可用strncmp()函数.

#include <stdio.h>
#include <string.h>int Str_Cmp(const char * lhs, const char * rhs)
{int ret = strcmp(lhs, rhs);if (ret == 0)return 1;elsereturn 0;
}int main(int argc, char* argv[])
{char *str1 = "hello lyshark";char *str2 = "hello lyshark";int ret = Str_Cmp(str1, str2);printf("字符串是否相等: %d \n", ret);if (!strncmp(str1, str2, 3))printf("两个字符串,前三位相等");system("pause");return 0;
}

strshr 字符串截取: 该函数主要实现从指定位置开始向后截取,直到遇到结束符停止输出.

#include <stdio.h>
#include <string.h>int main(int argc, char* argv[])
{const char buffer[32] = "hello lyshark welcome";const char needle[10] = "lyshark";const char* ret;ret = strstr(buffer, needle);printf("子字符串是: %s \n", ret);system("pause");return 0;
}

sprintf 格式化字符串: 该函数主要实现了对一段特定字符串进行格式化后并写入到新的缓冲区内.

#include <stdio.h>
#include <string.h>int main(int argc, char* argv[])
{// 格式化填充输出char buf[30] = { 0 };sprintf(buf, "hello %s %s", "lyshark","you are good");printf("格式化后: %s \n", buf);// 拼接字符串char *s1 = "hello";char *s2 = "lyshark";memset(buf, 0, 30);sprintf(buf, "%s --> %s", s1, s2);printf("格式化后: %s \n", buf);// 数字装换位字符串int number = 100;memset(buf, 0, 30);sprintf(buf, "%d", number);printf("格式化后: %s \n", buf);system("pause");return 0;
}

动态存储字符串: 首先分配二维指针并开辟空间,每次循环时开辟一维空间,并向其中写入字符串,最后循环输出.

#include <stdio.h>
#include <string.h>int main(int argc, char* argv[])
{// 分配空间char **p = malloc(sizeof(char *)* 5);for (int x = 0; x < 5;++x){p[x] = malloc(64); memset(p[x], 0, 64);sprintf(p[x], "Name %d", x + 1);}// 打印字符串for (int x = 0; x < 5; x++)printf("%s \n", p[x]);// 释放空间for (int x = 0; x < 5; x++){if (p[x] != NULL)free(p[x]);}system("pause");return 0;
}

实现字串长度统计: 字符串长度的计算原理时循环判断字符串是否遇到了\0并每次递增,遇到后直接返回.

#include <stdio.h>
#include <string.h>// 自己实现的一个字符串统计函数
int MyStrlen(char * String)
{int length = 0;// 写法一while (*String++ != '\0')length++;// 写法二//while (String[length] != '\0')//  length++;return length;
}int main(int argc, char* argv[])
{char *StringA = "hello lyshark";char *StringB = "lyshark";char StringC[] = { 'l', 'y', 's', 'h', 'a', 'r', 'k','\0'};int string_len = strlen(StringA);printf("字符串长度: %d \n", string_len);int string_cmp = strlen(StringA) > strlen(StringB);printf("字符串大小比较: %d \n", string_cmp);int my_string_len = MyStrlen(StringC);printf("字符串长度: %d \n", my_string_len);system("pause");return 0;
}

实现字符串拷贝: 字符串拷贝函数其原理是将源地址中的数据依次复制到目标中.

#include <stdio.h>
#include <string.h>// 使用数组实现字符串拷贝
void CopyString(char *dest,const char *source)
{int len = strlen(source);for (int x = 0; x < len; x++){dest[x] = source[x];}dest[len] = '\0';
}// 使用指针的方式实现拷贝
void CopyStringPtr(char *dest, const char *source)
{while (*source != '\0'){*dest = *source;++dest, ++source;}*dest = '\0';
}
// 简易版字符串拷贝
void CopyStringPtrBase(char *dest, const char *source)
{while (*dest++ = *source++);
}int main(int argc, char* argv[])
{char * str = "hello lyshark";char buf[1024] = { 0 };CopyStringPtrBase(buf, str);printf("%s \n", buf);system("pause");return 0;
}

实现查找字符串: 查找字符串函数MyStrStr()实现了在指定字符串中寻找字串,找到后返回之后的数据.

#include <stdio.h>
#include <string.h>char * MyStrStr(char * dest, char *src)
{char * p = NULL;char * temp = src;while (*dest){p = dest;while (*dest == *temp && *dest){ dest++; temp++; }if (!*temp)return p;elsetemp = src;dest = p; dest++;}return NULL;
}int main(int argc, char* argv[])
{char *p = MyStrStr("hello lyshark", "shark");printf("找到子串: %s\n", p);system("pause");return 0;
}

实现字符串拼接: 自己实现字符串追加拼接,把String所指向的字符串追加到dest所指向的字符串的结尾.

#include <stdio.h>
#include <string.h>void MyStrCat(char * String, char * SubStr)
{  // 将指针移动到末尾while (*String != NULL)String++;// 开始拷贝while (*SubStr != NULL){*String = *SubStr;String++; SubStr++;}*String = '\0';
}int main(int argc, char* argv[])
{char String[100] = "hello";char * Sub = " lyshark";MyStrCat(String, Sub);printf("拼接字符串: %s\n", String);system("pause");return 0;
}

实现字符串去空格: 实现对字符串中空格的去除,循环判断原字符串是否有空格,如果有则跳过,没有则追加.

#include <stdio.h>
#include <string.h>char * RemoveSpace(char * String)
{char * start = String;char * end = String + strlen(String) - 1;while (*end == ' ' && end > start)end--;*(end + 1) = '\0';while (*start == ' ' && start < end)start++;return start;
}int main(int argc, char* argv[])
{char str[] = "    hello lyshark    ";char *ptr = RemoveSpace(str);printf("原字符串: %s 新字符串: %s \n", str,ptr);system("pause");return 0;
}

实现字符串逆序: 实现将指定的字符串逆序,其原理是将字符串首尾互换位置,循环更改原字符串.

#include <stdio.h>
#include <string.h>void Strswap(char *Array)
{int len = strlen(Array);char *p1 = Array;char *p2 = &Array[len - 1];while (p1 < p2){char tmp = *p1;*p1 = *p2;*p2 = tmp;p1++, p2--;}
}int main(int argc, char* argv[])
{char str[20] = "hello lyshark";Strswap(str);for (int x = 0; x < strlen(str); x++)printf("%c", str[x]);system("pause");return 0;
}

实现字符串截取: 实现在参数String所指向的字符串中搜索第一次出现字符ch的位置,并输出其后内容.

#include <stdio.h>
#include <string.h>char * MyStrchr(const char *String, char ch)
{char *ptr = String;while (*ptr != '\0'){if (*ptr == ch)return ptr;ptr++;}return NULL;
}int main(int argc, char* argv[])
{char Str[] = "hello lyshark";char ch = 's';char *ptr = MyStrchr(Str, ch);printf("输出结果: %s \n", ptr);system("pause");return 0;
}

字符串首字母排序: 实现传入一个指针数组,函数将根据字符串第一个字母进行排序,排序影响原数组.

#include <stdio.h>
#include <string.h>void bubble(char **Str, int len)
{for (int x = 0; x < len - 1; x++){for (int y = 0; y < len - x - 1; y++){if (**(Str + y) < **(Str + y + 1)){char * tmp = *(Str + y);*(Str + y) = *(Str + y + 1);*(Str + y + 1) = tmp;}}}
}int main(int argc, char* argv[])
{char *Str[] = { "csdfw", "qwesfae", "retyu", "wsf" };int len = sizeof(Str) / sizeof(char *);bubble(Str,len);for (int x = 0; x < len; x++)printf("%s \n", Str[x]);system("pause");return 0;
}

实现字符串的匹配: 该函数与strchr()类似,不过当StringMatch()函数匹配成功后会返回一个位置而不是字符串.

#include <stdio.h>
#include <string.h>int StringMatch(char *String, char *SubString)
{int x, y, start = 0;int str_len = strlen(String) - 1;    // 得到主字符串长度int sub_len = strlen(SubString) - 1; // 得到子字符串长度int end_match = sub_len;for (y = 0; end_match <= str_len; end_match++, start++){if (String[end_match] == SubString[sub_len]){for (y = 0, x = start; y < sub_len && String[x] == SubString[y];)x++, y++;}if (y == sub_len)return (start + 1);}if (end_match > String)return -1;
}int main(int argc, char* argv[])
{char str[] = "hello lyshark welcome !";char sub[] = "lyshark";int ret = StringMatch(str, sub);if (ret != -1){printf("匹配到,字符间隔: %d \n", ret);}system("pause");return 0;
}

统计字符串字符个数: 实现循环一段字符串,每次取出一个字符并判断该字符是字母数组还是空格.

#include <stdio.h>
#include <string.h>void String_Count(char *String)
{int letter = 0, digit = 0, space = 0, other = 0;int len = strlen(String);for (int x = 0; x < len; x++){char ch = (char)String[x];if (ch != EOF){if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z')letter++;else if (ch >= '0' && ch <= '9')digit++;else if (ch == ' ')space++;elseother++;}}printf("字符: %d -> 数字: %d -> 空格: %d -> 其他: %d \n", letter, digit, space, other);
}int main(int argc, char* argv[])
{char *str = "hello lyshark !@#$ 123456";String_Count(str);char *str1 = "please input &*(123";String_Count(str1);system("pause");return 0;
}

指针实现字符串排序: 实现通过指针判断字符串位置,排序将按照A-Z的顺序进行.

#include <stdio.h>
#include <string.h>void String_Sort(char *String[],int len)
{char *temporary;int x, y;for (x = 0; x < len; x++){for (y = x + 1; y < len; y++){if (strcmp(String[x], String[y]) > 0){temporary = String[x];String[x] = String[y];String[y] = temporary;}}}
}int main(int argc, char* argv[])
{char *str[] = { "CPP", "Basic", "LyShark", "Hello", "Great" };char **ptr = str;String_Sort(str, 5);for (int x = 0; x < 5; x++)printf("%s \n", str[x]);system("pause");return 0;
}

实现字符串替换: 实现将string缓冲区里面的字符串{}符号,替换为%d字符.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <Windows.h>int ReplaceStr(char* sSrc, char* sMatchStr, char* sReplaceStr)
{int StringLen;char caNewString[64];char* FindPos;FindPos = (char *)strstr(sSrc, sMatchStr);if ((!FindPos) || (!sMatchStr))return -1;while (FindPos){memset(caNewString, 0, sizeof(caNewString));StringLen = FindPos - sSrc;strncpy(caNewString, sSrc, StringLen);strcat(caNewString, sReplaceStr);strcat(caNewString, FindPos + strlen(sMatchStr));strcpy(sSrc, caNewString);FindPos = (char *)strstr(sSrc, sMatchStr);}free(FindPos);return 0;
}int main(int argc, char **argv)
{char string[] = "192.168.1.{}";BOOL ret = ReplaceStr(string, "{}", "%d");if (ret == 0)printf("%s \n", string);system("pause");return 0;
}

本文作者: 王瑞
本文链接: https://www.lyshark.com/post/a11c68a9.html
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

相关文章:

3.1 C/C++ 使用字符与指针

C/C语言是一种通用的编程语言&#xff0c;具有高效、灵活和可移植等特点。C语言主要用于系统编程&#xff0c;如操作系统、编译器、数据库等&#xff1b;C语言是C语言的扩展&#xff0c;增加了面向对象编程的特性&#xff0c;适用于大型软件系统、图形用户界面、嵌入式系统等。…...

[代码学习]einsum详解

einsum详解 该函数用于对一组输入 Tensor 进行 Einstein 求和&#xff0c;该函数目前仅适用于paddle的动态图。 Einstein 求和是一种采用 Einstein 标记法描述的 Tensor 求和&#xff0c;输入单个或多个 Tensor&#xff0c;输出单个 Tensor。 paddle.einsum(equation, *opera…...

女性必看——“黄体破裂”到底有多可怕?

前几天的亚运会上发生了这样一件事&#xff1a; 雅思敏&#xff08;化名&#xff09;是一名国外皮划艇运动员&#xff0c;在亚运会上奋力完成皮划艇比赛后&#xff0c;突然开始 剧烈腹痛、面色苍白&#xff0c;大汗淋漓&#xff0c;经过进一步检查&#xff0c;确诊卵巢黄体破裂…...

colab切换目录的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…...

基于SSM的生活缴费系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…...

【WebLogic】WebLogic 2023年7月补丁导致JVM崩溃的解决方案

受影响版本&#xff1a; Oracle WebLogic 12c&#xff08;12.2.1.4.0&#xff09;Oracle WebLogic 14c&#xff08;14.1.1.0.0&#xff09; 问题描述&#xff1a; Oracle官方在2023年7月发布的最新版本的OPatch&#xff08;13.9.4.2.13&#xff09;存在一个新出现的Bug&#…...

简单OpenSL ES学习

初识OpenSL ES OpenSL ESObjects和Interfaces 所有的Object在OpenSl里面我们拿到的都是一个SLObjectItf&#xff1a;SLObjectItf_创建引擎创建过程要设计得这么麻烦&#xff1f;&#xff08;object的生命周期&#xff09;这么多参数&#xff0c;参数类型这么多学习障碍太大&…...

Linux网络编程- struct packet_mreq setsockopt()

struct packet_mreq struct packet_mreq 是一个数据结构&#xff0c;用于 Linux 中的原始数据包套接字&#xff0c;当我们想改变套接字的行为以接收特定类型的数据包时&#xff0c;它与 setsockopt() 函数配合使用。 下面是 struct packet_mreq 的定义&#xff1a; struct p…...

C++学习day4

作业&#xff1a; 1> 思维导图 2> 整理代码 1. 拷贝赋值函数课上代码 //拷贝赋值函数课上代码 #include<iostream> using namespace std;//创建类 class Stu { private://私有的string name;int socer;int *age;//此处注意用到指针类型 public://共有的//无参构…...

从零学算法54

54.给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 螺旋遍历&#xff1a;从左上角开始&#xff0c;按照 向右、向下、向左、向上 的顺序 依次 提取元素&#xff0c;然后再进入内部一层重复相同的步骤&#xff0c;直到…...

Logback日志框架使用详解以及如何Springboot快速集成

Logback简介 日志系统是用于记录程序的运行过程中产生的运行信息、异常信息等&#xff0c;一般有8个级别&#xff0c;从低到高为All < Trace < Debug < Info < Warn < Error < Fatal < OFF off 最高等级&#xff0c;用于关闭所有日志记录fatal 指出每个…...

Nginx概念

Nginx概念 Nginx 是一款面向性能设计的 HTTP 服务器&#xff0c;相较于 Apache、lighttpd 具有占有内存少&#xff0c;稳定性高等优势&#xff0c;同时也是一个非常高效的反向代理、负载平衡服务器 nginx使用的是反应器模式&#xff0c;主事件循环等待操作系统发出准备事件的信…...

vim基础指令(自用)

这个是自己随便写的&#xff0c;类似于笔记 vim 多模式编辑器 查看指令&#xff1a; gg&#xff1a; 定位光标到最开始行 shift(按)g 定位到最结尾行 nshift(按)g 定位到任意行 shift&#xff04; 定位到本行结尾 0 定位到本行开头 w&#xff1a;跨单词移动 h.j.k,l: 左下上右 …...

【centos7安装ElasticSearch】

概述 最近工作中有用到ES &#xff0c;当然少不了自己装一个服务器捣鼓。本文的ElasticSearch 的版本&#xff1a; 7.17.3 一、下载 ElasticSearch 点此下载 下载完成后上传至 Linux 服务器&#xff0c;本文演示放在&#xff1a; /root/ 下&#xff0c;进行解压&#xff1…...

ElementPlus Switch 开关基础使用

昨天开发用到开关组件 后台返回字段是 can_write 默认是0 or 1 但是Switch 组件绑定的默认值默认是 true or false 直接绑定会导致默认是关闭状态 在页面一加载 值发生变化时 会自己调用 查了文档 需要使用 active-value 和 inactive-value 来指定绑定的数据类型 …...

Spring Boot:自定义注解--annotation

目录 自定义注解的定义和作用范围如何创建自定义注解创建注解接口 如何使用自定义注解进行数据验证创建注解处理器控制器中使用注解 如何为字段添加注解 自定义注解的定义和作用范围 自定义注解可以作用在类、方法、属性、参数、异常、字段或其他注解上。 如何创建自定义注解…...

WIFI频段

问题&#xff1a; 5ghzwifi频段带宽怎么选 智造喵回答&#xff1a; 选择5GHz WiFi频段的带宽取决于你的网络需求和设备兼容性。通常有两种可选的带宽&#xff1a;20MHz和40MHz。 20MHz带宽&#xff1a;这是较为常见的 WiFi 频段带宽设置。它提供较好的穿墙能力和信号稳定性…...

Java的引用详解与示例

引用的作用 在Java中&#xff0c;引用&#xff08;Reference&#xff09;是一种重要的概念&#xff0c;它们用于管理对象的生命周期、内存分配和垃圾回收。引用的作用包括以下几个方面&#xff1a; 内存管理&#xff1a;引用帮助Java虚拟机&#xff08;JVM&#xff09;管理内存…...

c++视觉处理---霍夫变换

霍夫直线变换的函数 HoughLines 是OpenCV库中用于执行霍夫直线变换的函数。霍夫直线变换用于检测图像中的直线。下面是该函数的基本用法&#xff1a; cv::HoughLines(image, lines, rho, theta, threshold);image: 输入的二值图像&#xff0c;通常是通过边缘检测算法生成的。…...

el-table 边框颜色修改 简单有效!

废话不多说&#xff0c;直接上图 &#xff08;1&#xff09;修改前的图如下&#xff1a; 以上是elementUI原组件自带的样式 &#xff08;2&#xff09;下面是修改后的边框图如下&#xff1a; 源码如下&#xff1a; <el-table :data"jctableData" border size…...

Zabbix第二部分:基于Proxy分布式部署实现Web监控和Zabbix HA集群的搭建

代理和高可用 一、基于zabbix-proxy的分布式监控1.1 分布式监控的作用1.2 数据流向1.3 构成组件 二、部署zabbix代理服务器Step1 前置准备Step2 设置 zabbix 的下载源&#xff0c;安装 zabbix-proxyStep3 部署数据库并将zabbix相关文件导入Step4 修改zabbix-proxy的配置文件&am…...

JumpServer rce深入剖析

影响范围 JumpServer < v2.6.2 JumpServer < v2.5.4 JumpServer < v2.4.5 JumpServer v1.5.9 修复链接及参考 修改了一处代码&#xff1a; Git History 增加了一处鉴权 def connect(self):user self.scope["user"]if user.is_authenticated and …...

EasyExcel导入/导出Excel文件

EasyExcel导入/导出Excel文件简单写法 1、导入依赖 2、创建简单导入、导出demo 3、创建类 继承AnalysisEventListener&#xff08;导入Excel监听解析表格数据&#xff09; 4、创建类 基于注解 自定义Excel导出模版 1、导入EasyExcel依赖 <!--导入EasyExcel…...

力扣(LeetCode)2512. 奖励最顶尖的K名学生(C++)

优先队列哈希集合反向思维(或自定义排序) 模拟&#xff0c;请直接看算法思路&#xff1a; 两个哈希集合S1和S2, S1存正面词汇&#xff0c;S2存负面词汇&#xff1b;一个优先队列pq&#xff0c;pq存{score, id}键值对&#xff0c;即学生分数-学生id。 算法流程&#xff1a; 初…...

CubeMX+BabyOS 使用方法

MCU&#xff1a;STM32G030F 编译器&#xff1a;MDK 托管工具&#xff1a;Sourcetree CubeMX创建工程 BabyOS克隆 添加子模块 git submodule add https://gitee.com/notrynohigh/BabyOS.git BabyOS 切换dev 分支 查看当前分支 git branch -a 切换本地分支到dev git che…...

OpenResty安装-(基于Nginx的高性能Web平台,可在Nginx端编码业务)

文章目录 安装OpenResty1.安装1&#xff09;安装开发库2&#xff09;安装OpenResty仓库3&#xff09;安装OpenResty4&#xff09;安装opm工具5&#xff09;目录结构6&#xff09;配置nginx的环境变量 2.启动和运行3.备注 安装OpenResty 1.安装 首先你的Linux虚拟机必须联网 …...

算法-DFS+记忆化/动态规划-不同路径 II

算法-DFS记忆化/动态规划-不同路径 II 1 题目概述 1.1 题目出处 https://leetcode.cn/problems/unique-paths-ii 1.2 题目描述 2 DFS记忆化 2.1 思路 注意题意&#xff0c;每次要么往右&#xff0c;要么往下走&#xff0c;也就是说不能走回头路。但是仍有可能走到之前已经…...

黑盒测试方法:原理+实战

目录 一、如何设计测试用例 二、黑盒测试常用方法 1、基于需求进行测试用例的设计 2、等价类 3、边界值 4、判定表分析法&#xff08;因果分析法&#xff09; 5、正交表 6、场景设计法 三、案例补充 1、使用Fiddler模拟弱网 2、针对一个接口该如何测试 一、如何设计测试…...

SQLite事务处理

语法 BEGIN TRANSACTION; COMMIT TRANSACTION; &#xff08;或END TRANSACTION;&#xff09; ROLLBACK TRANSACTION; 事务处理 除了一些PRAGMA语句以外&#xff0c;其它访问数据库的语句会自动启动事务处理&#xff0c;并且在结束时自动提交。 通过上一节的命令可以手动控制…...

Java中CountDownLatch使用场景

在Java的并发API中&#xff0c;CountDownLatch是一个同步器&#xff0c;它允许一个或多个线程等待一组操作完成。 如果您正在开发一个服务器应用程序&#xff0c;该应用程序在开始处理请求之前需要初始化各种资源。这些资源可能是这样的&#xff1a; 加载配置文件建立数据库连…...