【详解】串(顺序串,链串)的基本运算(插入,链接,替换等全有)有给源码----看这一篇就够了

介绍:

什么是串,字符串简称串,剩下大家都知道,我就不多说,直接上重点,基本运算。

void StrAssign(SqString* s, char* cstr) 字符串常量赋给串s

void Display(SqString* s) 输出串s

void Destroy(SqString* s) 摧毁串

void StrCopy(SqString* s, SqString* t) 串复制

bool StrEqual(SqString* s, SqString* t) 判串相等

int StrLength(SqString* s) 求串长

SqString* Concat(SqString* s, SqString* t) 串连接

SqString* SubStr(SqString* s, int i, int j) 求子串

SqString* InsStr(SqString*str1, int i, SqString*str2) 插入串

SqString* DelStr(SqString* str, int i, int j) 串删去

SqString* RepStr(SqString* s, int i, int j, SqString* t) 子串替换

顺序串的基本运算

结构体

SqString

typedef struct str
{char data[1000];int length;
}SqString;

void StrAssign(SqString* s, char* cstr)

字符串常量赋给串s

void StrAssign(SqString* s, char* cstr)
{strcpy(s->data, cstr);return;
}

void Display(SqString* s)

 输出串s

void Display(SqString* s)
{printf("%s", s->data);//*s.datareturn;
}

void Destroy(SqString* s)

摧毁串

void Destroy(SqString* s)
{free(s);
}

void StrCopy(SqString* s, SqString* t) 

串复制

void StrCopy(SqString* s, SqString* t)
{strcpy(s->data, t->data);return;
}

bool StrEqual(SqString* s, SqString* t)

 判串相等

bool StrEqual(SqString* s, SqString* t)
{int x = strcmp(s->data, t->data);if (x == 0) return true;else return false;
}

int StrLength(SqString* s) 

求串长

int StrLength(SqString* s)
{int count = strlen(s->data);return count;
}

SqString* Concat(SqString* s, SqString* t) 

串连接

SqString* Concat(SqString* s, SqString* t)
{SqString* c = (SqString*)malloc(sizeof(SqString));strcpy(c->data, s->data);strcat(c->data, t->data);return c;
}

SqString* SubStr(SqString* s, int i, int j)

 求子串

SqString* SubStr(SqString* s, int i, int j)
{int len = StrLength(s);SqString* last = (SqString*)malloc(sizeof(SqString));if (i<1 || i>len || j<0 || i + j - 1>len) return last;int k = 0;for ( k = 0; k < j; k++){last->data[k] = s->data[i + k-1];}last->data[k] = '\0';return last;
}

SqString* InsStr(SqString*str1, int i, SqString*str2)

 插入串

SqString* InsStr(SqString*str1, int i, SqString*str2)
{int len1 = StrLength(str1);int len2 = StrLength(str2);SqString* last = (SqString*)malloc(sizeof(SqString));if (i <= 0 || i > len1 + 1) return last;int k = 0;int j = 0;int h = 0;for (k = 0; k < i - 1; k++){last->data[k] = str1->data[k];}for ( j = 0; j < len2; j++){last->data[k + j] = str2->data[j];}for ( h = k; h < len1; h++)//小心{last->data[h + k + j-1] = str1->data[h];}last->data[h + k + j-1] = '\0';//字符串一定记得要给一个结束标志return last;
}

SqString* DelStr(SqString* str, int i, int j)

 串删去

SqString* DelStr(SqString* str, int i, int j)
{int len = StrLength(str);SqString* last = (SqString*)malloc(sizeof(SqString));if (i <= 0 || i > len || i + j - 1 > len) return last;//防止越界,力扣不这样做会ovreflowint x, y, z;for (x = 0; x < i - 1; x++){last->data[x] = str->data[x];}//x=i-1for (y = i + j - 1; y < len; y++){last->data[x++] = str->data[y];}last->data[x] = '\0';return last;
}

SqString* RepStr(SqString* s, int i, int j, SqString* t)

 子串替换

SqString* RepStr(SqString* s, int i, int j, SqString* t)
{int len = StrLength(s);int len2 = StrLength(t);SqString* last = (SqString*)malloc(sizeof(SqString));if (i <= 0 || i > len || j<0 || i + j - 1>len) return last;int x, y, z;for (x = 0; x < i - 1; x++){last->data[x] = s->data[x];}for (y = 0; y < len2; y++){last->data[x + y] = t->data[y];}int h = 0;for (z = i + j - 1; z < len; z++){last->data[x + y +h] = s->data[z];h++;}last->data[x + y + h] = '\0';return last;
}

总代码c语言

#define  _CRT_SECURE_NO_WARNINGS 1
//串的基本运算
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct str
{char data[1000];int length;
}SqString;
void StrAssign(SqString* s, char* cstr)
{strcpy(s->data, cstr);return;
}
void Display(SqString* s)
{printf("%s", s->data);//*s.datareturn;
}
void Destroy(SqString* s)
{free(s);
}
void StrCopy(SqString* s, SqString* t)
{strcpy(s->data, t->data);return;
}
bool StrEqual(SqString* s, SqString* t)
{int x = strcmp(s->data, t->data);if (x == 0) return true;else return false;
}
int StrLength(SqString* s)
{int count = strlen(s->data);return count;
}
SqString* Concat(SqString* s, SqString* t)
{SqString* c = (SqString*)malloc(sizeof(SqString));strcpy(c->data, s->data);strcat(c->data, t->data);return c;
}
SqString* SubStr(SqString* s, int i, int j)
{int len = StrLength(s);SqString* last = (SqString*)malloc(sizeof(SqString));if (i<1 || i>len || j<0 || i + j - 1>len) return last;int k = 0;for ( k = 0; k < j; k++){last->data[k] = s->data[i + k-1];}last->data[k] = '\0';return last;
}
SqString* InsStr(SqString*str1, int i, SqString*str2)
{int len1 = StrLength(str1);int len2 = StrLength(str2);SqString* last = (SqString*)malloc(sizeof(SqString));if (i <= 0 || i > len1 + 1) return last;int k = 0;int j = 0;int h = 0;for (k = 0; k < i - 1; k++){last->data[k] = str1->data[k];}for ( j = 0; j < len2; j++){last->data[k + j] = str2->data[j];}for ( h = k; h < len1; h++)//小心{last->data[h + k + j-1] = str1->data[h];}last->data[h + k + j-1] = '\0';//字符串一定记得要给一个结束标志return last;
}
SqString* DelStr(SqString* str, int i, int j)
{int len = StrLength(str);SqString* last = (SqString*)malloc(sizeof(SqString));if (i <= 0 || i > len || i + j - 1 > len) return last;//防止越界,力扣不这样做会ovreflowint x, y, z;for (x = 0; x < i - 1; x++){last->data[x] = str->data[x];}//x=i-1for (y = i + j - 1; y < len; y++){last->data[x++] = str->data[y];}last->data[x] = '\0';return last;
}
SqString* RepStr(SqString* s, int i, int j, SqString* t)
{int len = StrLength(s);int len2 = StrLength(t);SqString* last = (SqString*)malloc(sizeof(SqString));if (i <= 0 || i > len || j<0 || i + j - 1>len) return last;int x, y, z;for (x = 0; x < i - 1; x++){last->data[x] = s->data[x];}for (y = 0; y < len2; y++){last->data[x + y] = t->data[y];}int h = 0;for (z = i + j - 1; z < len; z++){last->data[x + y +h] = s->data[z];h++;}last->data[x + y + h] = '\0';return last;
}
int main()
{SqString* str1 = (SqString*)malloc(sizeof(SqString));SqString* str2 = (SqString*)malloc(sizeof(SqString));char cstr[20] = "abcdef";char s[20] = "mm";//char s[20] = "de";StrAssign(str1, cstr);StrAssign(str2, s);SqString* str4 = RepStr(str1, 2, 3, str2);printf("%s", str4->data);return 0;
}

总代码c++

//顺序串基本运算的算法
#include <stdio.h>
#define MaxSize 100
typedef struct
{	char data[MaxSize];int length;			//串长
} SqString;
void StrAssign(SqString &s,char cstr[])	//字符串常量赋给串s
{int i;for (i=0;cstr[i]!='\0';i++)s.data[i]=cstr[i];s.length=i;
}
void DestroyStr(SqString &s)
{  }void StrCopy(SqString &s,SqString t)	//串复制
{int i;for (i=0;i<t.length;i++)s.data[i]=t.data[i];s.length=t.length;
}
bool StrEqual(SqString s,SqString t)	//判串相等
{bool same=true;int i;if (s.length!=t.length)				//长度不相等时返回0same=false;else for (i=0;i<s.length;i++)if (s.data[i]!=t.data[i])	//有一个对应字符不相同时返回0{	same=false;break;}return same;
}
int StrLength(SqString s)	//求串长
{return s.length;
}
SqString Concat(SqString s,SqString t)	//串连接
{SqString str;int i;str.length=s.length+t.length;for (i=0;i<s.length;i++)	//将s.data[0..s.length-1]复制到strstr.data[i]=s.data[i];for (i=0;i<t.length;i++)	//将t.data[0..t.length-1]复制到strstr.data[s.length+i]=t.data[i];return str;
}
SqString SubStr(SqString s,int i,int j)	//求子串
{SqString str;int k;str.length=0;if (i<=0 || i>s.length || j<0 || i+j-1>s.length)return str;					//参数不正确时返回空串for (k=i-1;k<i+j-1;k++)  		//将s.data[i..i+j]复制到strstr.data[k-i+1]=s.data[k];str.length=j;return str;
} 
SqString InsStr(SqString s1,int i,SqString s2)	//插入串
{int j;SqString str;str.length=0;if (i<=0 || i>s1.length+1)  //参数不正确时返回空串return str;for (j=0;j<i-1;j++)      		//将s1.data[0..i-2]复制到strstr.data[j]=s1.data[j];for (j=0;j<s2.length;j++)		//将s2.data[0..s2.length-1]复制到strstr.data[i+j-1]=s2.data[j];for (j=i-1;j<s1.length;j++)		//将s1.data[i-1..s1.length-1]复制到strstr.data[s2.length+j]=s1.data[j];str.length=s1.length+s2.length;return str;
}
SqString DelStr(SqString s,int i,int j)		//串删去
{int k;SqString str;str.length=0;if (i<=0 || i>s.length || i+j>s.length+1) //参数不正确时返回空串return str;for (k=0;k<i-1;k++)       		//将s.data[0..i-2]复制到strstr.data[k]=s.data[k];for (k=i+j-1;k<s.length;k++)	//将s.data[i+j-1..s.length-1]复制到strstr.data[k-j]=s.data[k];str.length=s.length-j;return str;
}
SqString RepStr(SqString s,int i,int j,SqString t)	//子串替换
{int k;SqString str;str.length=0;if (i<=0 || i>s.length || i+j-1>s.length) //参数不正确时返回空串return str;for (k=0;k<i-1;k++)				//将s.data[0..i-2]复制到strstr.data[k]=s.data[k];for (k=0;k<t.length;k++)   		//将t.data[0..t.length-1]复制到strstr.data[i+k-1]=t.data[k];for (k=i+j-1;k<s.length;k++)	//将s.data[i+j-1..s.length-1]复制到strstr.data[t.length+k-j]=s.data[k];str.length=s.length-j+t.length;return str;
}
void DispStr(SqString s)	//输出串s
{int i;if (s.length>0){	for (i=0;i<s.length;i++)printf("%c",s.data[i]);printf("\n");}
}

链串的基本运算

为了防止文章过长链串的基本运算我直接全部给出有需要的自取

c语言总代码

#define  _CRT_SECURE_NO_WARNINGS 1
//链串
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
typedef struct snode
{char data;struct snode* next;
}LinkStrNode;
void StrAssign(LinkStrNode* s, char*cstr)
{int len = strlen(cstr);LinkStrNode* pre = s;for (int i = 0; i < len; i++){LinkStrNode* p = (LinkStrNode*)malloc(sizeof(LinkStrNode));p->data = cstr[i];pre->next = p;pre = p;}pre->next = NULL;
}
void Display(LinkStrNode* s)
{LinkStrNode* p = s->next;while (p != NULL){printf("%c", p->data);p = p->next;}return;
}
void DestroyStr(LinkStrNode* s)
{LinkStrNode* p = s->next;LinkStrNode* pre = s;while (p != NULL){free(pre);pre = p;p = p->next;}free(pre);
}
void StrCopy(LinkStrNode* s, LinkStrNode* t)
{LinkStrNode* ps = s;LinkStrNode* pt = t;while (pt != NULL){ps->data = pt->data;ps = ps->next; pt = pt->next;}return;
}
bool StrEqual(LinkStrNode* s, LinkStrNode* t)
{LinkStrNode* ps = s;LinkStrNode* pt = t;while (ps != NULL && pt != NULL){if (ps->data != pt->data) return false;ps = ps->next; pt = pt->next;}if (ps != NULL || pt != NULL) return false;return true;
}
int StrLength(LinkStrNode* s)
{int count = 0;LinkStrNode* p = s->next;while (p != NULL){count++;p = p->next;}return count;
}
LinkStrNode* Concat(LinkStrNode* s, LinkStrNode* t)
{LinkStrNode* last = (LinkStrNode*)malloc(sizeof(LinkStrNode));LinkStrNode* p = last;LinkStrNode* ps = s->next;LinkStrNode* pt = t->next;while (ps != NULL){LinkStrNode* q = (LinkStrNode*)malloc(sizeof(LinkStrNode));q->data = ps->data;p->next = q;ps = ps->next;p = q;}while (pt != NULL){LinkStrNode* q = (LinkStrNode*)malloc(sizeof(LinkStrNode));q->data = pt->data;p->next = q;pt = pt->next;p = q;}p->next = NULL;return last;
}
LinkStrNode* SubStr(LinkStrNode* s, int i, int j)
{int len = StrLength(s);LinkStrNode* last = (LinkStrNode*)malloc(sizeof(LinkStrNode));if (i <= 0 || i > len || j<0 || i + j - 1>len) return last;LinkStrNode* p = s;LinkStrNode* pres = last;for (int z = 0; z < i; z++) p = p->next;for (int x = 0; x < j; x++){LinkStrNode* q = (LinkStrNode*)malloc(sizeof(LinkStrNode));q->data = p->data;pres->next = q;pres = q;p = p->next;}pres->next = NULL;return last;
}
LinkStrNode* InsStr(LinkStrNode* s, int i, LinkStrNode* t)
{int len = StrLength(s);LinkStrNode* last = (LinkStrNode*)malloc(sizeof(LinkStrNode));if (i <= 0 || i > len + 1) return last;LinkStrNode* ps = s->next;LinkStrNode* pl = last;int j, k, h;for (j = 0;ps!=NULL&& j < i - 1; j++){LinkStrNode* q = (LinkStrNode*)malloc(sizeof(LinkStrNode));q->data = ps->data;pl->next = q;pl = q;ps = ps->next;}int len2 = StrLength(t);LinkStrNode* pt = t->next;for ( k = 0;pt!=NULL&& k < len2; k++){LinkStrNode* q = (LinkStrNode*)malloc(sizeof(LinkStrNode));q->data = pt->data;pl->next = q;pl = q;pt = pt->next;}for (h = j; ps!=NULL&&h < len; h++){LinkStrNode* q = (LinkStrNode*)malloc(sizeof(LinkStrNode));q->data = ps->data;pl->next = q;pl = q;ps = ps->next;}pl->next = NULL;return last;
}
LinkStrNode* DelStr(LinkStrNode* s, int i, int j)
{int len = StrLength(s);LinkStrNode* last = (LinkStrNode*)malloc(sizeof(LinkStrNode));if (len < 1) return last;if (i <= 0 || i > len || j<0 || i + j - 1>len) return last;LinkStrNode* ps = s->next;LinkStrNode* pa = last;int x, y, h;for ( x = 0; x < i-1; x++){LinkStrNode* q = (LinkStrNode*)malloc(sizeof(LinkStrNode));q->data = ps->data;pa->next = q;pa = q;ps = ps->next;	}	for ( y = 0; y < j; y++){ps = ps->next;}for (h = x + y; h < len; h++){LinkStrNode* q = (LinkStrNode*)malloc(sizeof(LinkStrNode));q->data = ps->data;pa->next = q;pa = q;ps = ps->next;}pa->next = NULL;return last;
}
LinkStrNode* RepStr(LinkStrNode* s, int i, int j, LinkStrNode* t)
{int len = StrLength(s);LinkStrNode* last = (LinkStrNode*)malloc(sizeof(LinkStrNode));if (len < 1) return last;if (i <= 0 || i > len || j<0 || i + j - 1>len) return last;int x, y, z;LinkStrNode* ps = s->next;LinkStrNode* pt = last;for (x = 0; x < i - 1; x++){LinkStrNode* q = (LinkStrNode*)malloc(sizeof(LinkStrNode));q->data = ps->data;pt->next = q;pt = q;ps = ps->next;}int len2 = StrLength(t);LinkStrNode* pt2 = t->next;for (y = 0; pt2!=NULL&&y < len2; y++){LinkStrNode* q = (LinkStrNode*)malloc(sizeof(LinkStrNode));q->data = pt2->data;pt->next = q;pt = q;pt2 = pt2->next;}int k;for ( k = 0; k < j; k++) ps = ps->next;for (z = x + k; z < len; z++){LinkStrNode* q = (LinkStrNode*)malloc(sizeof(LinkStrNode));q->data = ps->data;pt->next = q;pt = q;ps = ps->next;}pt->next = NULL;return last;
}
int main()
{LinkStrNode* s = (LinkStrNode*)malloc(sizeof(LinkStrNode));LinkStrNode* t = (LinkStrNode*)malloc(sizeof(LinkStrNode));char str[] = "abcd";char str2[] = "mmm";StrAssign(t, str2);StrAssign(s, str);//LinkStrNode* y = SubStr(s, 2, 3);//LinkStrNode*y = Concat(s, t);//int h = StrLength(s);//int k = StrEqual(t, s);//printf("%d", h);LinkStrNode* y = RepStr(s, 2,2,t);Display(y);return 0;
}

c++总代码

//链串基本运算的算法
#include <stdio.h>
#include <malloc.h>
typedef struct snode 
{	char data;struct snode *next;
} LinkStrNode;
void StrAssign(LinkStrNode *&s,char cstr[])	//字符串常量cstr赋给串s
{int i;LinkStrNode *r,*p;s=(LinkStrNode *)malloc(sizeof(LinkStrNode));r=s;						//r始终指向尾结点for (i=0;cstr[i]!='\0';i++) {	p=(LinkStrNode *)malloc(sizeof(LinkStrNode));p->data=cstr[i];r->next=p;r=p;}r->next=NULL;
}
void DestroyStr(LinkStrNode *&s)
{	LinkStrNode *pre=s,*p=s->next;	//pre指向结点p的前驱结点while (p!=NULL)					//扫描链串s{	free(pre);					//释放pre结点pre=p;						//pre、p同步后移一个结点p=pre->next;}free(pre);						//循环结束时,p为NULL,pre指向尾结点,释放它
}
void StrCopy(LinkStrNode *&s,LinkStrNode *t)	//串t复制给串s
{LinkStrNode *p=t->next,*q,*r;s=(LinkStrNode *)malloc(sizeof(LinkStrNode));r=s;						//r始终指向尾结点while (p!=NULL)				//将t的所有结点复制到s{	q=(LinkStrNode *)malloc(sizeof(LinkStrNode));q->data=p->data;r->next=q;r=q;p=p->next;}r->next=NULL;
}
bool StrEqual(LinkStrNode *s,LinkStrNode *t)	//判串相等
{LinkStrNode *p=s->next,*q=t->next;while (p!=NULL && q!=NULL && p->data==q->data) {	p=p->next;q=q->next;}if (p==NULL && q==NULL)return true;elsereturn false;
}
int StrLength(LinkStrNode *s)	//求串长
{int i=0;LinkStrNode *p=s->next;while (p!=NULL) {	i++;p=p->next;}return i;
}
LinkStrNode *Concat(LinkStrNode *s,LinkStrNode *t)	//串连接
{LinkStrNode *str,*p=s->next,*q,*r;str=(LinkStrNode *)malloc(sizeof(LinkStrNode));r=str;while (p!=NULL)				//将s的所有结点复制到str{	q=(LinkStrNode *)malloc(sizeof(LinkStrNode));q->data=p->data;r->next=q;r=q;p=p->next;}p=t->next;while (p!=NULL)				//将t的所有结点复制到str{	q=(LinkStrNode *)malloc(sizeof(LinkStrNode));q->data=p->data;r->next=q;r=q;p=p->next;}r->next=NULL;return str;
}
LinkStrNode *SubStr(LinkStrNode *s,int i,int j)	//求子串
{int k;LinkStrNode *str,*p=s->next,*q,*r;str=(LinkStrNode *)malloc(sizeof(LinkStrNode));str->next=NULL;r=str;						//r指向新建链表的尾结点if (i<=0 || i>StrLength(s) || j<0 || i+j-1>StrLength(s))return str;				//参数不正确时返回空串for (k=0;k<i-1;k++)p=p->next;for (k=1;k<=j;k++) 			//将s的第i个结点开始的j个结点复制到str{	q=(LinkStrNode *)malloc(sizeof(LinkStrNode));q->data=p->data;r->next=q;r=q;p=p->next;}r->next=NULL;return str;
}
LinkStrNode *InsStr(LinkStrNode *s,int i,LinkStrNode *t)		//串插入
{int k;LinkStrNode *str,*p=s->next,*p1=t->next,*q,*r;str=(LinkStrNode *)malloc(sizeof(LinkStrNode));str->next=NULL;r=str;								//r指向新建链表的尾结点if (i<=0 || i>StrLength(s)+1)		//参数不正确时返回空串return str;for (k=1;k<i;k++)					//将s的前i个结点复制到str{	q=(LinkStrNode *)malloc(sizeof(LinkStrNode));q->data=p->data;r->next=q;r=q;p=p->next;}while (p1!=NULL)					//将t的所有结点复制到str{	q=(LinkStrNode *)malloc(sizeof(LinkStrNode));q->data=p1->data;r->next=q;r=q;p1=p1->next;}while (p!=NULL)						//将结点p及其后的结点复制到str{	q=(LinkStrNode *)malloc(sizeof(LinkStrNode));q->data=p->data;r->next=q;r=q;p=p->next;}r->next=NULL;return str;
}
LinkStrNode *DelStr(LinkStrNode *s,int i,int j)	//串删去
{int k;LinkStrNode *str,*p=s->next,*q,*r;str=(LinkStrNode *)malloc(sizeof(LinkStrNode));str->next=NULL;r=str;						//r指向新建链表的尾结点if (i<=0 || i>StrLength(s) || j<0 || i+j-1>StrLength(s))return str;				//参数不正确时返回空串for (k=0;k<i-1;k++)			//将s的前i-1个结点复制到str{	q=(LinkStrNode *)malloc(sizeof(LinkStrNode));q->data=p->data;r->next=q;r=q;p=p->next;}for (k=0;k<j;k++)				//让p沿next跳j个结点p=p->next;while (p!=NULL)					//将结点p及其后的结点复制到str{	q=(LinkStrNode *)malloc(sizeof(LinkStrNode));q->data=p->data;r->next=q;r=q;p=p->next;}r->next=NULL;return str;
}
LinkStrNode *RepStr(LinkStrNode *s,int i,int j,LinkStrNode *t)	//串替换
{int k;LinkStrNode *str,*p=s->next,*p1=t->next,*q,*r;str=(LinkStrNode *)malloc(sizeof(LinkStrNode));str->next=NULL;r=str;							//r指向新建链表的尾结点if (i<=0 || i>StrLength(s) || j<0 || i+j-1>StrLength(s))return str;		 			//参数不正确时返回空串for (k=0;k<i-1;k++)  			//将s的前i-1个结点复制到str{	q=(LinkStrNode *)malloc(sizeof(LinkStrNode));q->data=p->data;q->next=NULL;r->next=q;r=q;p=p->next;}for (k=0;k<j;k++)				//让p沿next跳j个结点p=p->next;while (p1!=NULL)				//将t的所有结点复制到str{	q=(LinkStrNode *)malloc(sizeof(LinkStrNode));q->data=p1->data;q->next=NULL;r->next=q;r=q;p1=p1->next;}while (p!=NULL)					//将结点p及其后的结点复制到str{	q=(LinkStrNode *)malloc(sizeof(LinkStrNode));q->data=p->data;q->next=NULL;r->next=q;r=q;p=p->next;}r->next=NULL;return str;
}
void DispStr(LinkStrNode *s)	//输出串
{LinkStrNode *p=s->next;while (p!=NULL){	printf("%c",p->data);p=p->next;}printf("\n");
}

小结:

对文章有任何问题的还请指出,接受大家的批评,让我改进,如果大家有所收获的话还请不要吝啬你们的点赞和收藏,这可以激励我写出更加优秀的文章,本文代码均经过调试运行,如果对你有帮助的话还请给我点个赞。

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

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

相关文章

由麦克斯韦方程组推出均匀平面电磁波及其特征

由麦克斯韦方程组推出均匀平面电磁波及其特征 均匀平面电磁波是指在传输方向垂直与传输方向垂直的平面上&#xff0c;电磁波的每一点的电场和磁场都相同&#xff0c;这种电磁波被称作均匀平面电磁波。 研究任何一种物理现象&#xff0c;当一种物理现象特别复杂的时候&#xf…

无监督关键词提取算法:TF-IDF、TextRank、RAKE、YAKE、 keyBERT

TF-IDF TF-IDF是一种经典的基于统计的方法&#xff0c;TF(Term frequency)是指一个单词在一个文档中出现的次数&#xff0c;通常一个单词在一个文档中出现的次数越多说明该词越重要。IDF(Inverse document frequency)是所有文档数比上出现某单词的个数&#xff0c;通常一个单词…

Elasticsearch 优化常用思路

1、硬件选择 Elasticsearch 的基础是 Lucene&#xff0c;所有的索引和文档数据是存储在本地的磁盘中&#xff0c;具体的路径可在 ES 的配置文件../config/elasticsearch.yml 中配置&#xff0c;如下&#xff1a; #----------------------------------- Paths --------------…

LT8713SX高性能Type-C/DP1.4到Type-C/DP1.4/HDMI2.0转换器,USB3.0高速双向无源开关,支持同屏异显

LT8713SX是一款高性能Type-C/DP1.4到Type-C/DP1.4/HDMI2.0转换器&#xff0c;具有三个可配置的DP1.4/HDMI2.0/ dp输出接口和音频输出接口。LT8713SX支持DisplayPort单流传输(SST)模式和多流传输(MST)模式。当接收到多个视频/音频流&#xff0c;这些视频/音频流被打包并通过单个…

【Java系列】文件操作详解

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【Java系列专栏】【JaveEE学习专栏】 本专栏旨在分享学习JavaEE的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 …

计算机网络——基础知识汇总(八)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…

vim 命令速记

vim 常用命令 编辑模式&#xff0c; ESC-> 命令模式&#xff08;常规模式&#xff09;&#xff0c;命令模式下输入&#xff1a;->底行模式 常规模式下&#xff1a; i&#xff1a;切换到插入 / 查找&#xff0c;查到后 n下一个 N上一个底行模式下&#xff1a; q 不保…

网络通信(1)-网络通信原理

目录 一、网络概述 二、网络基础架构 三、网络协议 四、网络层次模型

学习Go语言Web框架Gee总结--上下文Context(二)

学习Go语言Web框架Gee总结--上下文Context context/go.modcontext/main.gocontext/gee/context.gocontext/gee/router.gocontext/gee/gee.go 学习网站来源&#xff1a;Gee 项目目录结构&#xff1a; context/go.mod module examplego 1.21.5require gee v0.0.0 replace gee…

【23-24 秋学期】NNDL 作业13 优化算法3D可视化

编程实现优化算法&#xff0c;并3D可视化 1. 函数3D可视化 分别画出 和 的3D图 代码如下&#xff1a; from mpl_toolkits.mplot3d import Axes3D import numpy as np from matplotlib import pyplot as plt import torch from nndl.op import Op# 画出x**2 class Optimized…

查看ios 应用程序性能

目录 摘要 前言 性能概括 CPU内存监控 内存监控 磁盘监控 网络监控 GPU fps 摘要 本篇博文将介绍一款重量级性能测试工具——克魔助手&#xff0c;针对iOS应用程序的性能监控进行详细介绍。通过克魔助手&#xff0c;开发者可以方便地查看应用程序的CPU、内存、GPU性能…

【Python】配置环境变量

Python配置Windows系统环境变量 打开电脑属性 ——> 高级系统设置 ——> 高级 ——> 环境变量 Python安装目录 D:\Program Files\Python39 winR打开运行&#xff0c;输入cmd打开命令窗口 python -V

vivado XDC优先级

XDC优先级 关于XDC优先级 Xilinx Design Constraints&#xff08;XDC&#xff09;的优先级规则继承自Synopsys Design限制&#xff08;SDC&#xff09;。本章讨论如何解决约束冲突或重叠。 XDC约束顺序 XDC约束是按顺序解释的命令。对于等效约束&#xff0c;最后一个约束优…

基于Java SSM框架实现停车场管理系统项目【项目源码+论文说明】计算机毕业设计

基于java的SSM框架实现停车场管理系统演示 摘要 以往的停车场管理事务处理主要使用的是传统的人工管理方式&#xff0c;这种管理方式存在着管理效率低、操作流程繁琐、保密性差等缺点&#xff0c;长期的人工管理模式会产生大量的文本车辆上报与文本数据&#xff0c;这对事务的…

BERT模型

BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;是一个由谷歌在2018年提出的自然语言处理&#xff08;NLP&#xff09;预训练模型。 BERT&#xff08;双向编码器表示&#xff09;模型是一种基于Transformer的架构&#xff0c;它用于涉及…

Latex使用BibTeX添加参考文献,保持专有名词原格式,如全部大写方法

一、背景 当我们使用Latex写文章时&#xff0c;通常使用BibTeX的方式添加参考文献&#xff0c;这种方式非常方便&#xff0c;可以使用期刊定义好的参考文献格式。但有时&#xff0c;某篇参考文献题目中含有专有名词时&#xff0c;如DMPs&#xff0c;参考文献会自动将其转为小写…

Android ImageView的Bitmap在scaleType情况下Bitmap顶部与底部RectF坐标,Kotlin

Android ImageView的Bitmap在scaleType情况下&#xff0c;Bitmap顶部与底部RectF坐标&#xff0c;Kotlin 通常&#xff0c;在ImageView设置scaleType后&#xff0c;Android会把原始图片通过缩放放在ImageView里面&#xff0c;例如&#xff1a; <ImageViewandroid:id"id…

【心得】PHP反序列化高级利用(phar|session)个人笔记

目录 ①phar反序列化 ②session反序列化 ①phar反序列化 phar 认为是java的jar包 calc.exe phar能干什么 多个php合并为独立压缩包&#xff0c;不解压就能执行里面的php文件&#xff0c;支持web服务器和命令行 phar协议 phar://xxx.phar $phar->setmetadata($h); m…

Redis:原理+项目实战——Redis实战2(Redis实现短信登录(原理剖析+代码优化))

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;Redis&#xff1a;原理项目实战——Redis实战1&#xff08;session实现短信登录&#xff08;并剖析问题&#xff09;&#xff09…

实现CodeWave 低代码开发平台快速应用开发的完整指南

目录 前言1 CodeWave开发流程2 应用创建2.1 新建应用2.2 从应用模板创建应用 3 数据模型设计3.1 实体设计3.2 结构设计3.3 枚举设计 4 逻辑设计4.1 查询数据源设置4.2 组件和属性配置4.3 属性设置与服务端全局变量 5 页面设计5.1 选择页面模板5.2 前端全局变量设计5.3 事件逻辑…