【C++】C++的初步认识

news2024/11/20 14:14:33
  • 🌸博主主页:@釉色清风
  • 🌸文章专栏:C++
  • 🌸今日语录:自律以修身,自省以观己。自学以长识,自处以蓄力。

🌻Hi~大家好,这次文章是C++的初步认识,包括从C语言到C++、C++的数据类型和运算符、C++的输入输出、内置函数、有默认参数的函数、函数重载、函数模板等等。适用于刚刚入门C++的小伙伴,可以帮助大家在短时间内了解到C++的一些特性。希望对大家有帮助。

C++的初步认识

  • 🌼由C语言到C++
    • 🌻C++对C的增强
  • 🌼C++的数据类型和运算符
    • 🌻C++的数据类型
      • 🌻布尔型数据(bool)及其运算
      • 🌻结构体类型定义变量struct可以省略
      • 🌻强制类型转换
    • 🌻C++新增运算符
      • 🌻新增动态内存分配的运算符
      • 🌻新增作用域运算符
      • 🌻变量的引用
      • 🌻常变量
  • 🌼C++的输入和输出
    • 🌻输入流和输出流的基本操作
    • 🌻cin和>>
    • 🌻cout和<<
    • 🌻输出格式可以由程序员控制吗?
    • 🌻输入输出的格式控制符
  • 🌼内置函数
    • 🌻内置函数(inline function)概念
  • 🌼有默认参数的函数
    • 🌻默认值的参数在最右端
  • 🌼函数重载
  • 🌼函数模板
    • 🌻 定义函数模板
  • 🌼字符串类
    • 🌻字符串数组

🌼由C语言到C++

C语言,是于1972年在贝尔实验室D.M.Ritchie和K.Thompson为计算机专业人员设计的语言,大多数系统软件和许多应用软件都是用C语言编写的,但是随着软件规模的增大,用C语言编写程序渐渐显得有些吃力了。

于是在20世纪80年代初,在贝尔实验室Bjarne Stroustrup博士及其同事在C语言的基础上成功开发C++。C++与C语言兼容,保留了C语言原有的优点,增加了面向对象的机制。

🌻C++对C的增强

所以,可以理解为 C++是对C语言的增强。
在原来面向过程的机制基础上,对C语言的功能做了不少扩充。

  • 用C语言编写的程序基本上可以不加修改地用于C++。
  • 增加了命名空间、引用、域作用符等大型程序开发需要的机制。
  • C++既可以用于面向过程的结构化程序设计,又可以用于面向对象的程序设计,是一种功能强大的混合型的程序设计语言。

增加了面向对象的机制。

  • 面向对象程序设计,是针对开发较大规模的程序而提出来的,目的是提高软件开发的效率。
  • 面向对象和面向过程并不矛盾,而是各有用途、互为补充。
  • 最新的标准,支持范型编程。

C++是C语言的超集,C语言是C++的子集。

🌼C++的数据类型和运算符

第一个C++程序

#include <iostream>//包含头文件iostream
using namespace std;
int main()
{
    cout<<"Hello World";//输出
    return 0;
}

其中头文件iostream包括输出流和输入流。
C++头文件和C语言头文件的一些区别:

🌻C++的数据类型

C++的数据类型在C语言的数据类型上有所扩充。

如上图所示。

🌻布尔型数据(bool)及其运算

  • C和C++中都用数值1代表"真",用0代表"假"。
  • C++增加了逻辑型数据类型:bool型
  • 逻辑型常量只有两个,即false(假)和true(真)。
  • 逻辑型使程序更直观易懂。
  • 在编译系统处理逻辑型数据时,将false处理为0,将true处理为1.
  • 在实际中,非0被视为"真",0被视为“假”。
  • 逻辑型数据可以和数值型数据进行算术运算。
  • 逻辑运算的规则照旧。(真值表)
  • bool类型占1个字节。
bool flag=ture;
bool found=false;

示例:

#include <iostream>
using namespace std;
int main()
{
	//创建bool数据类型
	bool flag = true;
	cout << flag << endl;

	//重新赋值
	flag = false;
	cout << false << endl;
	//故本质上1代表真,0代表假

	//bool类型所占类型空间
	cout << "bool类型所占的内存空间" << sizeof(bool) << endl;

	return 0;
}

运行结果如下:

🌻结构体类型定义变量struct可以省略

结构体类型在定义变量时,其前struct可以省略。
示例:

#include <iostream>
using namespace std;

struct student
{
	int no;
	float math;
};

int main()
{
	int n;
	cin >> n;
	student wang;//C语言中,必须是struct student  wang
	wang.no = n;
	cin >> wang.math;
	cout << wang.no << " " << wang.math << endl;

	return 0;
}

🌻强制类型转换

支持两种格式:

  • (数据类型)(表达式)——c语言风格
  • 数据类型(表达式)——c++风格

示例:

double x=2.5,y=4.7;
int a=25,b;
b=a+(int)(x+y);
y=double(5%3);

🌻C++新增运算符

🌻新增动态内存分配的运算符

在C语言中,由malloc()函数分配内存,由free()函数释放内存。
在C++中,分配内存时用new运算符,释放内存用delete运算符。

分配内存用new运算符

格式如下:

  • 指针变量=new 数据类型
  • 指针变量=new数据类型[数组大小];

示例:

int *p1,*p2,*p3;
p1=new int;
p2=new int[5];
p3=new int(5);//分配一个int型变量空间,并赋值为5.

new为程序分配一块内存空间,并返回指向该内存的首地址。

释放空间用delete运算符

格式如下:

  • delete指针变量
    示例:
delete p1;
delete p3;
delete []p2;//释放p2所指向的数组空间

用new获取的内存空间,必须用delete进行释放。

🌻新增作用域运算符

#include <iostream>
using namespace std;
float a=2.4;//全局变量a
int main()
{
    int a=8;//局部变量a
    cout<<a<<endl;//a为局部变量
    cout<<::a<<endl;//::a表示全局变量a    
}

我们再来看一个相似的示例:

#include <iostream>
//这儿不写使用的命名空间
float a=2.4;
int main()
{
    int a=8;
    std::cout<<a<<std::endl;
    std::cout<<::a<<std::endl;
    
}

std::,表示使用命名空间std空间中定义的标识符。

🌻变量的引用

C++对C的一个重要扩充:对一个数据可以使用“引用”
引用的作用为:为一个变量起一个别名,例如
示例:

int a;//定义a是整型变量
int &b=a;//声明b是a的引用,b是a的别名
a=20;
cout<<b<<endl;

声明变量b作为引用类型,不另开辟内存单元来存放b的值。

  • b和a占内存中的同一个存储单元,它们具有同一地址。
  • a或b的作用相同,都代表同一变量。
  • 引用可以理解为:使变量b具有变量a的地址。

&是引用声明符,并不代表地址,不同于"把a的值赋给b的地址"。

引用的简单使用:

#include <iostream>
#include <iomanip>
int main()
{
    int a=10;
    int &b=a;//声明引用类型变量要同时初始化
    a=a*a;
    cout<<a<<" "<<b<<endl;
    cout<<b<<" "<<a<<endl;
    return 0;
}

增加引用类型,主要用于扩充传递数据功能。

#include <iostream>
using namespace std;
void swap(int &a,int &b);
int main()
{
    int i,j;
    i=3,j=5;
    swap(i,j);
    cout<<"i="<<i<<" "<<"j="<<j<<endl;
    return 0;
}
void swap(int &a,int &b)
{
    int temp;
    temp=a;
    a=b;
    b=temp;
}

在这里插入图片描述

🌻常变量

常变量:在定义变量时,加上关键字const,则变量的值在程序运行期间不能改变。
例如:

const int a=3;
const int b=#+6,c=3*cos(1.5);

在定义变量时必须同时对它初始化,此后它的值不能再改变。
示例:

#include <iostream>
using namespace std;
const int price =30;
int main()
{
    int num,total;
    num=10;
    total=num*price;
    cout<<"total="<<total<<endl;
    return 0;
}

符号常量(宏定义)vs常变量

🌼C++的输入和输出

C++的输入和输出都用"流"(stream)的方式实现。

注意:
流对象cin、cout和流运算符的定义存放在C++的输入输出库iostream中;cout、cin并不是C++本身提供的语句,运算符<<和>>也不是C++本身提供的运算符,要在程序中使用cin、cout和流运算符,必须先#include。

🌻输入流和输出流的基本操作

格式:

  • cout<<表达式1<<表达式2<<…表达式n;
  • cin>>变量1>>变量2>>…>>变量n;

示例:

cin>>a>>b>>c;
cout<<"a="<<a<<"\tb="<<"\tc="<<c<<endl;

<<和提取运算符>>的优先级与结合性?

int a=1,b=4,c=8;
//逗号运算符的优先级最低
cout<<a,b,c; //输出1
cout<<a,b,c<<endl;//报错;
cout<<a+b+c<<endl;//输出13

🌻cin和>>

输入中,有多种方式对数据进行分隔

int a,b,c,d;
cin>>a>>b>>c>>d;

下面是各种可选的输入形式
程序将自动识别符号:

#include <iostream>
using namespace std;
int main()
{
    int a,b;
    char op;
    cin>>a>>op>>b;
    cout<<"result"<<"\n";
    cout<<"a:"<<a<<"\n";
    cout<<"b:"<<b<<"\n";
    cout<<"op:"<<op<<"\n";
    return 0;
    }
  • cin不会读入空格,回车,将其当成分隔符。
  • 将“分隔符”读入,找getchar()函数。

🌻cout和<<

在用cout输出时,系统会自动判断输出数据的类型,使输出的数据按相应的类型输出。
在必要时,一条语句中多个数据输出合理分隔。
示例:

int a=4;
float b=345.7888435;
char c="a";
cout<<a<<"\t"<<b<<" "<<c<<endl;//输出浮点型数据默认输出6位数

输出格式如下:

🌻输出格式可以由程序员控制吗?

目标:输入数时满足一些特殊的要求

  • 规定字段宽度
  • 保留的小数位数
  • 数据向左或向右对齐等

方法:使用输入输出流中的控制符

  • 设置数值的技术(8,10,16)
  • 设置填充
  • 设置精度
  • 设置对齐
  • 设置其他方式
    示例:
#include <iostream>
#include<iomanip> //不要忘了包含此头文件
using namespace std;
int main()
{
    double d=225.0/7.0;
    cout<<"d="<<d<<endl;
    cout<<setiosflags(ios::fixed);
    cout<<"d="<<setprecision(5)<<d<<endl;
    cout<<"d="<<setrecision(2)<<d<<endl;
    return 0;
}

🌻输入输出的格式控制符

如下面这张表:

🌼内置函数

🌻内置函数(inline function)概念

我们知道,调用函数时需要一定的时间和空间的开销。于是,我们在找一些提升效率的方法,既要用到函数这样的形式,也希望效率提升。在C语言中,提升效率的方法是宏定义。

#define area(a,b) (a)*(b)

在C++中,将功能做的更彻底,不是像宏定义一样换概念,而是定义了内置函数。
内置函数在编译的是否将所调用函数的代码直接嵌入到主调函数中。内置函数,有时也叫内联函数。
示例:

关于内置函数

  • 内置函数只是影响编译过程。
  • 使用内置函数可以节省运行时间,但却增加了目标程序的长度
  • 一般来说,只将规模很小(一般为5个语句以下)而使用频繁的函数(如定时采集数据的函数)声明为内置函数。
  • 内置函数中不能包括复杂的控制语句,如循环语句和switch语句。
  • 对函数作inline声明,只是程序设计者对编译系统提出的一个建议,而不是指令性的。

🌼有默认参数的函数

在函数声明中我们剋给出函数参数的值:

float area(float r=6.5);

在函数调用时,可以不给出实参,如:

area();//相当于area(6.5)

也可以给出形参:

area(7.5);给出形参,形参r得到7.5

所以:

  • 函数声明时形参指定默认值
  • 函数调用时,市场的个数可以与形参的个数不同
  • 实参未给定时,从实参的默认值得到值。

例如:
函数声明时:

float  volume(float h,float r=12.5);

在函数调用时,我们可以给出不给出默认参数的值:

volume (45.6);//相当于volume(45.6,12.5)

也可以给出默认参数的值:

volume(34.2,10.4);

同时,在函数声明时的形参名可以不写:

float area(float=6.5);
float volume(float,float=12.5);

🌻默认值的参数在最右端

实参与形参的结合必须时从左至右顺序进行的
指定默认值的参数必须放在列表中的最右端,否则出错。
例如:

void f1(float a,int b=0,int c,char d='a');//报错
void f2(float ,int c,int b=0,char d='a');//正确使用

如果调用上面的f2函数,可以采用下面的形式:

f2(3.5,5,3,'x');//形参的值全部从实参得到
f2(3.553);//最后一个形参取默认值'a';
f2(3.5,3);//最后两个形参取默认值,b=0,d='a'

利用带默认参数的函数实现求非负数的最大值

int max(int a.int b,int c=0);//仅声明时默认
int main()
{
    int a,b,c;
    cin>>a>>b>>c;
    cout<<"max(a,b,c)="<<max(a,b,c)<<endl;
    cout<<"max(a,b)="<<max(a,b)<<endl;
    return 0;
}
int max(int a,int b,int c)//定义时不默认
{
    if(b>a) a=b;
    if(c>a)a=c;
    return a;
}

🌼函数重载

第一种情况是,函数重载即,同名同体,但接口不同。(即重载的函数名相同,参数、函数体相同,仅数据类型不同。)
例如:

#include <iostream>
using namespace std;
//函数声明
int max(int a,int b,intc);
double max(double a,double b,double c);
long max(long a,long b,long c);
int main()
{
    int i1,i2,i3,i;
    cin>>i1>>i2>>i3;
    i=max().i1,i2,i3);
    cout<<"i_max="<<i<<endl;
    
    double d1,d2,d3,d;
    cin>>d1>>d2>>d3;
    d=max(d1,d2,d3);
    cout<<"d_max="<<d<<endl;
    
    long g1,g2,g3,g;
    cin>>g1>>g2>>g3;
    g=max(g1,g2,g3);
    cout<<"g_max="<<g<<endl;

    return 0;
    }
    int max(int a,int b,int c)
    {
        if(b>a) a=b;
        if(c>a) a=c;
        return a;   
    }


    double max(double a,double b,double c)
    {
        if(b>a) a=b;
        if(c>a) a=c;
        return a;   
    }

    long max(long a,long b,long c)
    {
        if(b>a) a=b;
        if(c>a) a=c;
        return a;   
    }
    

第二种情况是,重载函数,同名不同体,参数个数有区别。

我们总结以下函数重载(function overloading):一名多用

  • 函数的重载,用同一函数名定义多个函数,这些函数的参数个数或者参数类型不同。
  • 函数的重载使得一个函数名字重新赋予心得含义,使得一个函数名可以多用。
  • 在编程时,要实现细节不同的同一类的功能时,用函数的同载,例如:

不能算作重载情况:

 int f(int);
 long f(int);
 void f(int);

函数的参数个数、参数类型或参数顺序三者中必须至少有一个不同,函数返回值可以相同也可以不相同。

同时,在使用重载函数时,同名函数的功能应当相同或相近,不要用同一函数名去实现完全不相干的功能,虽然程序也能运行,但是可读性不好,使人莫名其妙。

函数重载与参数的默认值不要冲突,在编译系统时,调用函数时会产生歧义。

🌼函数模板

在重载函数中,当我们声明重载函数时,函数本身它们的函数体是一样的,分别定义每一个函数,比较冗杂。
所以为了解决这个问题,我们就发展出了函数模板(function template),它用来替代重载函数的多次定义。
下面我们来简要了解以下函数模板

  • 所谓的函数模板,实际上是建立一个通用函数,其函数类型和形参类型可以不具体·指定,而是用一个虚拟的类型来代表。
  • 凡是函数体相同的函数都可以用这个模拟来代替,不必定义多个函数,只需在模板中定义一次即可。
  • 在调用函数时系统会根据实参的类型来取代模板中的虚拟类型,从而实现了不同函数的功能。

下面我们来看一个例子:

#include <iostream>
using namespace std;
template<typename T>
T max(T a, T b, T c)
{
	if (b > a)a = b;
	if (c > a) a = c;
	return a;
}
int main()
{
	int i1 = 185, i2 = -76, i3 = 567;
	double d1 = 56.87, d2 = 90.23, d3 = 3214.78;
	long g1 = 67859, g2 = -482947, g3 = 1984747;
	cout << "i_max=" << max(i1, i2, i3) << endl;
	cout << "f_max=" << max(d1, d2, d3) << endl;
	cout << "g_max=" << max(g1, g2, g3) << endl;
	return 0;
}


🌻 定义函数模板

  • 先进行模板声明,再定义函数
template <typename T>
template <class T>
  • 虚拟类型名即可以被用于函数定义
  • 在对程序进行编译时,编译系统会将函数名与模板相匹配,将实参的类型取代了函数模板中的虚拟类型T。

声明模板后,我们对函数进行定义。

T max(T a,T b,T c)
{
    if (b>a)a=b;
    if(c>a)a=c;
    return a;
}

cout<<max(i1,i2,i3);
cout<<max(d1,d2,d3);
cout<<max(g1,g2,g3);

同时,在一个函数中,需要的类型参数可以不止一个,可以根据需要确定个数。如:

template <class T1,typename T2>

函数模板不仅仅是将数据类型参数化,函数模板更是将数据数据类型也参数化了。

🌼字符串类

C语言中的字符串函数包含在头文件string.h中。
C++中的新成分。
在C语言中,

#include <iostream>
#include <cstring>
using namespace std;
int main()
{
    char srt1[50],str2[50],temp[50];
    cout<<"please input strings:";
    cin>>str1>>str2;
    if(strcmp(str1,str2)>0)
    {
        strcpy(temp,str1);
        strcpy(str1,str2);
        strcpy(str2,temp);
        
    }
    cout<<"now,they are:";
    cout<<str1<<","<<str2<<endl;
    
}

在C++中

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string str1,str2,temp;
    cout<<"please input strings:";
    cin>>str1>>str2;
    if (str1>str2)
    {
        temp=str1;
        str1=str2;
        str2=temp;
    }
    cout<<"now,they are:";
    cout<<str1<<","<<str2<<endl;
}

使用string类型很任性。

  • 为字符串直接赋值
string string1,string2;
string1="Canada";
string2=string1;

对字符串变量中某一字符操作

string word ="Then";
word[2]='a';
  • 用加号连接字符串
string string1="C++";
string string2="Language";
string1=string1+string2;
  • 用关系运算符直接比较字符串
    ==、>、<、!=、<=、>=
if (str1>str2)
  • 字符串输入输出
cin>>string1;
cout<<string2;

string 类型并非C++亲生,但是,很强大。
string并不是C++语言本身具有的基本类型,它是C++标准库中声明的一个字符串类。
文件包含#include 或#include .

🌻字符串数组

定义一个字符串数组并初始化

string name[5]={"Zhang","Li","Wang","Tan"};

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

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

相关文章

【LeetCode: 2864. 最大二进制奇数 + 模拟 + 位运算】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

基于SSH的物流配送管理系统的设计与实现

摘 要 当今社会&#xff0c;物流配送已成为影响经济发展的显著因素。而随着社会信息化发展&#xff0c;建立有效的物流配送管理体系不仅能够减少物流成本&#xff0c;更能够提升工作人员的工作效率与客户的满意度。而基于B/S架构的物流配送管理体系&#xff0c;不仅具有良好的…

Navicat操作MYSQL

Navicat操作MYSQL 数据表的操作-创建表数据表的操作-修改、删除表数据的操作数据类型与约束常用数据类型数据约束 数据库备份与还原数据库的备份数据表的还原 数据表的操作-创建表 数据表的操作-修改、删除表 数据的操作 数据类型与约束 常用数据类型 整型&#xff1a;int 有符…

这是一份简单到没朋友的上手图数据库的图文教程

前几天和社区小伙伴友好交流&#xff08;闲聊&#xff09;&#xff0c;不少加入 NebulaGraph 的小伙伴虽然对图感兴趣&#xff0c;但是因为业务调整或者是时间缘故&#xff0c;最终没能用上 NebulaGraph。而他们当中不少的小伙伴说&#xff0c;春节我打算好好学习一番。既然大家…

打造你的HTML5打地鼠游戏:零基础入门教程

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

mysql基于mycat实现读写分离

试验环境 基于mysql主从复制已经实现 mycat主机192.168.199.149&#xff0c;安装好java和jdk 数据库主机192.168.199.150 数据库从机192.168.199.151 149配置 下载mycat并解压 vim /root/mycat/conf/server.xml vim /root/mycat/conf/schema.xml 150是主数据库&#xff0…

[Linux][CentOs][Mysql]基于Linux-CentOs7.9系统安装并配置开机自启Mysql-8.0.28数据库

目录 一、准备工作&#xff1a;获取安装包和相应工具 &#xff08;一&#xff09;所需安装包 &#xff08;二&#xff09;安装包下载链接 &#xff08;三&#xff09;在服务器上创建文件夹并上传安装包 二、安装MySql &#xff08;一&#xff09;删除系统自带的mariadb …

OceanBase原理之内存管理

第1章 前言 1.1 多租户管理简介 OceanBase数据库中&#xff0c;应用了单集群多租户的设计&#xff0c;使得一个集群内能够创建多个彼此独立的租户。在OceanBase数据库&#xff0c;租户成为了资源分配的单位&#xff0c;同时还是数据库对象管理和资源管理的基础。 在某种程度…

代码随想录算法训练营Day44 ||leetCode 完全背包 || 518. 零钱兑换 II || 377. 组合总和 Ⅳ

完全背包 518. 零钱兑换 II 遍历硬币和金额&#xff0c;累加所有可能 class Solution { public:int change(int amount, vector<int>& coins) {vector<int> dp(amount1,0);dp[0]1;for (int i 0; i < coins.size();i){for(int j coins[i]; j < amount;…

安装PyTorch详细过程

安装anaconda 登录anaconda的官网下载&#xff0c;anaconda是一个集成的工具软件不需要我们再次下载。anaconda官网 跳转到这个页面如果你的Python版本正好是3.8版&#xff0c;那便可以直接根据系统去选择自己相应的下载版本就可以了。 但是如果你的Python版本号不是当前页面…

linux驱动——中断

1.Cortex-A系列的中断的简介 中断的基本概念&#xff1a;(interrupt) 中断本质上是系统内部的异常机制,当中断产生之后&#xff0c;他会停下当前正在执行的任务&#xff0c;转而去做其他的事情,在停下当前正在执行的任务之前,要先入栈&#xff08;保护现场,其他的事情做完之后…

漏洞原理 | CORS跨域学习篇

0x01&#xff1a;原理 1、 什么是CORS 全称跨域资源共享&#xff0c;用来绕过SOP(同源策略)来实现跨域访问的一种技术。 CORS漏洞利用CORS技术窃取用户敏感信息 2、 同源策略简介 同源策略是浏览器最核心也是最基本的安全功能&#xff0c;不同源的客户端脚本在没有明确授权…

UDP连接树莓派时提高连接速度,降低卡顿感

背景 树莓派4B刷的是ubuntu20.4系统&#xff0c;使用win10自带的远程桌面连接和其连接&#xff0c;卡的一批&#xff0c;于是探索并记录下如何降低连接卡顿感 步骤一 点击显示选项&#xff0c; 降低显示配置和颜色深度&#xff1a; 步骤二 我的树莓派是通过电脑移动热点的方式…

中科大计网学习记录笔记(十八):网络层:数据平面:导论

前言&#xff1a; 学习视频&#xff1a;中科大郑烇、杨坚全套《计算机网络&#xff08;自顶向下方法 第7版&#xff0c;James F.Kurose&#xff0c;Keith W.Ross&#xff09;》课程 该视频是B站非常著名的计网学习视频&#xff0c;但相信很多朋友和我一样在听完前面的部分发现信…

今天做了两个工具

URL可用性检测 2.影视 第一个工具为第二个工具服务&#xff0c;一定程度上检测了搜集到视频解析接口是否可用。

AI知识库也太方便了吧,中小型企业都要知道它!

生活在这个信息爆炸的时代&#xff0c;信息的获取变得前所未有的方便&#xff0c;但随之而来的却是信息筛选和管理的难题。对于中小型企业来说&#xff0c;如何有效运用自身积累的各类信息&#xff0c;直接影响着企业的运营效率和市场竞争力。而这&#xff0c;正是AI知识库可以…

linux系统adb调试工具

adb的全称为Android Debug Bridge&#xff0c;就是起到调试桥的作用。通过adb可以在Eclipse中通过DDMS来调试Android程序&#xff0c;说白了就是调试工具。 adb的工作方式比较特殊&#xff0c;采用监听Socket TCP 5554等端口的方式让IDE和Qemu通讯&#xff0c;默认情况下adb会…

电脑丢失msvcr120.dll文件怎么办-丢失msvcr120.dll文件的五种解决方法

今天有看到小伙伴们在问msvcr120.dll文件是什么&#xff0c;所以今天的这篇文章将给大家科普msvcr120.dll文件是什么&#xff0c;msvcr120.dll文件在电脑系统中的重要性&#xff0c;如果你的电脑中出现了关于msvcr120.dll文件丢失的问题&#xff0c;也可以参考这篇文章&#xf…

2024 年中国高校大数据挑战赛赛题 C:用户对博物馆评论的情感分析完整思路以及源代码分享

博物馆是公共文化服务体系的重要组成部分。国家文物局发布&#xff0c; 2021 年我国新增备案博物馆 395 家&#xff0c;备案博物馆总数达 6183 家&#xff0c;排 名全球前列&#xff1b;5605 家博物馆实现免费开放&#xff0c;占比达 90%以上&#xff1b;全国 博物馆举办展览 3…

汇编课设——秒表2

1. 设计要求 基于 51 开发板,利用键盘作为按键输入,将数码管作为显示输出,实现电子秒表。 功能要求: (1)计时精度达到百分之一秒; (2)能按键记录下5次时间并通过按键回看 (3)设置时间,实现倒计时,时间到,数码管闪烁 10 次,并激发蜂鸣器,可通过按键解除。 2. 设计思…