第六章:string类

2023-10-30

系列文章目录



前言

string是字符序列的类


C++文档

为什么学习string类

C语言中的字符串

C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。

ASCII

ASCII (American Standard Code for Information Interchange):美国信息交换标准代码是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。它是最通用的信息交换标准,并等同于国际标准ISO/IEC 646。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符。

**在计算机中存储和显示英语信息

26个大小写字母、数字、标点符号

建立一个符号和编码对应关系的映射表

用一个字节的大小存储7位编码,最高位不用,一个符号→一个字节**

在这里插入图片描述

int main()
{
	char str1[] = "apple";	

	char str2[] = "好好";

	cout << sizeof(str1) << endl;
		
	cout << sizeof(str2) << endl;

	return 0;
}

在这里插入图片描述

int main()
{

	char str2[] = "好好";

	cout << sizeof(str2) << endl;

	str2[3]--;
	cout << str2 << endl;

	str2[3]--;
	cout << str2 << endl;

	str2[3]++;
	cout << str2 << endl;
	
	str2[3]++;
	cout << str2 << endl;

	return 0;
}

在这里插入图片描述

Unicode

统一码(Unicode),也叫万国码单一码,由统一码联盟开发,是计算机科学领域里的一项业界标准,包括字符集、编码方案等。

统一码是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求

UTF-8

UTF-8的特点是对不同范围的字符使用不同长度的编码。对于0x00-0x7F之间的字符,UTF-8编码与ASCII编码完全相同。UTF-8编码的最大长度是4个字节。从上表可以看出,4字节模板有21个x,即可以容纳21位二进制数字。统一码的最大码位0x10FFFF也只有21位。

在这里插入图片描述

UTF-16

UTF-16编码以16位无符号整数为单位。我们把统一码编码记作U。

UTF-32

UTF-32编码以32位无符号整数为单位。统一码的UTF-32编码就是其对应的32位无符号整数。

GBK

GBK全称《汉字内码扩展规范》(GBK即“国标”、“扩展”汉语拼音的第一个字母,英文名称:Chinese Internal Code Specification)。

GBK 亦采用双字节表示,总体编码范围为 8140-FEFE,首字节在 81-FE 之间,尾字节在 40-FE 之间,剔除 xx7F 一条线。总计 23940 个码位,共收入 21886 个汉字和图形符号,其中汉字(包括部首和构件)21003 个,图形符号 883 个。
在这里插入图片描述

标准库中的string类

string类

  1. 字符串是表示字符序列的类
  2. 标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性。
  3. string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型
  4. string类是basic_string模板类的一个实例,它使用char来实例化basic_string模板类,并用char_traits和allocator作为basic_string的默认参数
  5. 注意,这个类独立于所使用的编码来处理字节:如果用来处理多字节或变长字符(如UTF-8)的序列,这个类的所有成员(如长度或大小)以及它的迭代器,将仍然按照字节(而不是实际编码的字符)来操作。

string类的文档

在这里插入图片描述

string类用utf-8编码,按单字节处理
u16string用utf-16编码
u32string用utf-32编码
wstring类按两字节处理

在这里插入图片描述

编码:
计算机中存储只有二进制0、1,用对应的ASCII表来表示文字(支持英文的)其中ASCII表是对256个值建立一个对应的表示值
在早期只有欧美国家使用计算机(早期的计算机中只能表示英文,不能表示其他国家的文字),后来全世界各个国家都开始用计算机了,需要建立自己的编码表
在Linux中常用utf-8、utf-16、utf-32
在Windows中常用gbk

总结

  1. string是表示字符串的字符串类

  2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。

  3. string在底层实际是:basic_string模板类的别名,typedef basic_string<char, char_traits, allocator>string;

  4. 不能操作多字节或者变长字符的序列。

  5. 在使用string类时,必须包含#include头文件以及using namespace std;

string类的常用接口说明

string类的常用接口

1. string类对象的常见构造

(constructor)函数名称 功能说明
string() (重点) 构造空的string类对象,即空字符串
string(const char* s) (重点) 用C-string来构造string类对象
string(size_t n, char c) string类对象中包含n个字符c
string(const string&s) (重点) 拷贝构造函数
void Teststring()
{
    string s1; // 构造空的string类对象s1
    string s2("hello bit"); // 用C格式字符串构造string类对象s2
    string s3(s2); // 拷贝构造s3
}

2. string类对象的容量操作

函数名称 功能说明
size(重点) 返回字符串有效字符长度
length 返回字符串有效字符长度
capacity 返回空间总大小,但不包含’\0’
empty (重点) 检测字符串释放为空串,是返回true,否则返回false
clear (重点) 清空有效字符
reserve (重点) 为字符串提前预留空间
resize (重点) 将有效字符的个数该成n个,多出的空间用字符c填充

在这里插入图片描述

注意:
1. size()与length()方法底层实现原理完全相同,引入size()的原因是为了与其他容器的接口保持一致,一般情况下基本都是用size()。
2. clear()只是将string中有效字符清空,不改变底层空间大小。
3. resize(size_t n) 与 resize(size_t n, char c)都是将字符串中有效字符个数改变到n个,不同的是当字符个数增多时:resize(n)用0来填充多出的元素空间,resize(size_t n, char c)用字符c来填充多出的元素空间。
注意:resize在改变元素个数时,如果是将元素个数增多,可能会改变底层容量的大小,如果是将元素个数减少,底层空间总大小不变。
4. reserve(size_t res_arg=0):为string预留空间,不改变有效元素个数,当reserve的参数小于string的底层空间总大小时,reserver不会改变容量大小。
5. 在Windows中容量是以大约1.5倍增容的,在Linux中容量是以大约2倍增容的
6. reserve的作用:如果知道需要多少空间,直接一次性开好,避免增容,提高效率
7. resize的作用:既能开好空间,又能对这些空间初始化

string容量相关方法使用代码演示

3. string类对象的访问及遍历操作

函数名称 功能说明
operator[] (重 点) 返回pos位置的字符,const string类对象调用
begin+ end begin获取一个字符的迭代器 + end获取最后一个字符下一个位置(‘\0’)的迭代器
rbegin + rend rbegin获取最后一个字符的迭代器 + rend获取开头一个字符前一个位置的迭代器
范围for C++11支持更简洁的范围for的新遍历方式,底层是用迭代器

string中元素访问及遍历代码演示

int main()
{
    string s1("hello world");
    string::iterator it = s1.begin();
    //正向迭代器
    while (it != s1.end())
    {
	    cout << *it << " ";
	    it++;
    }
	string::reverse_iterator rit = s1.rbegin();
    //反向迭代器
	while (rit != s1.rend())
	{
		cout << *rit << " ";
		rit++;
        //都是++
	}
  
    for (auto ch : s1)
	{
		cout << ch << " ";
	}

	cout << endl;
  
	return 0;
}
void Func1(const string& s)
{	
	//遍历和读容器的数据,不能写
	//string::const_iterator it = s.cbegin();
    auto it = s.cbegin();
    //静态正向迭代器
	while (it != s.end())
	{
		cout << *it << " ";
        it++;
	}

	cout << endl;
}
void Func2(const string& s)
{	
    
	//string::const_reverse_iterator it = s.crbegin();
    auto it = s.crbegin();
    //静态反向迭代器
	while (it != s.rend())
	{
		cout << *it << " ";
        it++;
	}

	cout << endl;
}
int main()
{
	string s1("hello world");
	string::iterator it = s1.begin();
    //iterator 迭代器 是属于类的一种类型
	while (it != s1.end())
	{
		cout << *it << " ";
		it++;
	}

	for (auto ch : s1)
	{
		cout << ch << " ";
	}
    
    Func1();
    
    Func2();

	cout << endl;
	
	return 0;
}

总结:
迭代器是一个行为像指针的东西,有可能是指针,也有可能不是指针
迭代器可以用统一类似的方式去访问修改容器
begin()返回的是第一个有效数据位置的迭代器,end()返回的是最后一个有效数据的下一个位置的迭代器
rbegin()返回的是最后个有效数据位置的迭代器,rend()返回的是第一个有效数据的前一个位置的迭代器
所有的容器都支持用迭代器,所以迭代器才是容器通用的访问方式(vector/string这样的结构支持下标+[]去访问,而像list、map这样的就不支持了),虽然迭代器在所有数据结构都是可以使用的,但[]+下标指适用顺序表。
const对象要用const迭代器,只读,不能写
operator[]和at的区别:operator[]如果发生越界访问会报断言错误(assert),而at会报异常(需要捕获异常)

4. string类对象的修改操作

函数名称 功能说明
push_back 在字符串后尾插字符c
append 在字符串后追加一个字符串
operator+= (重点) 在字符串后追加字符串str
c_str(重点) 返回C格式字符串
find + npos(重点) 从字符串pos位置开始往后找字符c,返回该字符在字符串中的位置
rfind 从字符串pos位置开始往前找字符c,返回该字符在字符串中的位置
substr 在str中从pos位置开始,截取n个字符,然后将其返回

string中插入和查找等使用代码演示

注意:
1. 在string尾部追加字符时,s.push_back© / s.append(1, c) / s += 'c’三种的实现方式差不多,一般情况下string类的+=操作用的比较多,+=操作不仅可以连接单个字符,还可以连接字符串。
2. 对string操作时,如果能够大概预估到放多少字符,可以先通过reserve把空间预留好。

int main()
{
	string s1("world");

	s1.insert(0, "hello");

	//不推荐使用insert,效率低
	//s1.insert(5, 1, ' ');
	//s1.insert(5, " ");
	string::iterator it = s1.begin();
	s1.insert(it+5, ' ');
	cout << s1 << endl;
	return 0;
}
int main()
{
	//不推荐使用erase,效率低
	string s1("hello world");
	//s1.erase(5, 1);

	string::iterator it = s1.begin();
	//s1.erase(it + 5);

	//s1.erase(5);
	s1.erase(5, 6);
	cout << s1 << endl;

}
int main()
{
	//string s1("hello world");
	//s1.replace(5, 1, "%%d");//扩容+移动数据
	//cout << s1 << endl;、

	string s1("hello world i love you");
	size_t num = 0;
	for (auto ch : s1)
	{
		if (ch == ' ')
		{
			num++;
		}
	}
	//提前开空间,避免replace时扩容
	s1.reserve(2* num + s1.size());
	size_t pos = s1.find(' ');
	while(pos != string::npos)
	{	
		s1.replace(pos, 1, "%20");
		pos = s1.find(' ', pos + 3);
	}
	cout << s1 << endl;
}

//空间换时间
int main()
{
	string s1("hello world i love you");
	string newStr;
	size_t num = 0;
	for (auto ch : s1)
	{
		if (ch == ' ')
		{
			num++;
		}
	}
	//提前开空间,避免replace时扩容
	s1.reserve(2* num + s1.size());
	for (auto ch : s1)
	{
		if (ch != ' ')
			newStr += ch;
		else
			newStr += "%20";
	}
	s1 = newStr;
	cout << newStr << endl;
}
int main()
{
	string s1("xxx");
	string s2("yyy");

	s1.swap(s2);
	cout << s1 << endl;
	cout << s2 << endl;

	swap(s1, s2);
	cout << s1 << endl;
	cout << s2 << endl;
	 
}

在这里插入图片描述

5. string类非成员函数

函数 功能说明
operator+ 尽量少用,因为传值返回,导致深拷贝效率低
operator>> (重点) 输入运算符重载
operator<< (重点) 输出运算符重载
getline (重点) 获取一行字符串
relational operators (重点) 大小比较

在这里插入图片描述

在这里插入图片描述

cin遇到空格和换行就会分割(或结束),而getline遇到空格不会分割(或结束)遇到换行才分割(或结束)

6. string类对象的字符串的转换(在C++11适用)

在这里插入图片描述

vs和g++下string结构的说明

注意:下述结构是在32位平台下进行验证,32位平台下指针占4个字节.

vs下string的结构

string总共占28个字节,内部结构稍微复杂一点,先是有一个联合体,联合体用来定义string中字符串的存储空间:

  • 当字符串长度小于16时,使用内部固定的字符数组来存放

  • 当字符串长度大于等于16时,从堆上开辟空间

union _Bxty
{ // storage for small buffer or pointer to larger one
	value_type _Buf[_BUF_SIZE];
	pointer _Ptr;
	char _Alias[_BUF_SIZE]; // to permit aliasing
} _Bx;

这种设计也是有一定道理的,大多数情况下字符串的长度都小于16,那string对象创建好之后,内部已经有了16个字符数组的固定空间,不需要通过堆创建,效率高。
其次:还有一个size_t字段保存字符串长度,一个size_t字段保存从堆上开辟空间总的容量最后:还有一个指针做一些其他事情。
故总共占16+4+4+4=28个字节。
在这里插入图片描述

g++下string的结构

G++下,string是通过写时拷贝实现的,string对象总共占4个字节,内部只包含了一个指针,该指针将来指向一块堆空间,内部包含了如下字段:

  • 空间总大小

  • 字符串有效长度

  • 引用计数

struct _Rep_base
{
	size_type        _M_length;
	size_type        _M_capacity;
	_Atomic_word      _M_refcount;
};
  • 指向堆空间的指针,用来存储字符串

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1uFFi6yM-1689733417126)(https://flowus.cn/preview/cc560c88-e3f5-4381-b6fc-3a21c3afb6f4)]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第六章:string类 的相关文章

  • Taglib:性能和崩溃问题

    我在 Qt 应用程序中使用 taglib 库 1 7 2 从音乐文件夹中读取 mp3 文件的一些元数据 问题是我发现它非常慢 例如 这是代码 QString path C Music QDir d path QStringList file
  • 是否可以使静态控件透明?

    我正在尝试实现一个静态控件 该控件刷新 更改文本 以响应每秒发生一次的某个事件 由于我不想每秒绘制整个客户区域 所以我决定使用静态控件 现在的问题是父窗口被蒙皮 这意味着它有自定义位图作为背景 而静态控件没有适应 所以我正在寻找使静态控件的
  • 为什么更新外键后引用约束会不一致?

    抱歉 这个模糊的标题很难用一句话来描述 我有 2 个实体User and UserAddress 其中 User 有 2 个外键DefaultInvoiceAddressId and DefaultDeliveryAddressId和 Us
  • 以 ISO 8601 格式输出日期

    如何在 C 中获取以下格式的日期 2016 04 26T19 50 48Z include
  • 如何将 CroppedBitmap 转换为 BitmapImage

    我正在尝试将 CroppedBitmap 转换为 BitmapImage 编辑 不使用内存流 我尝试过直接转换它 似乎这不是一个选择 这应该没那么难 我正在尝试剪切 BitmapImage 的一部分 并创建一个仅包含新裁剪的 Bitmap
  • 外部剃刀视图看不到外部模型

    我对外部剃刀视图有疑问 在我的项目中 我有主 mvc Web 程序集和动态加载的外部类库程序集 来自 DB 及其自己的控制器 视图和模型 这些程序集在运行时不会直接引用和加载 我能够通过为控制器创建自定义控制器工厂 为视图创建自定义虚拟路径
  • 多态性中基类缺少虚拟析构函数 = 资源泄漏?

    我们知道 如果要多态地使用基类 则需要将基类的析构函数指定为 virtual 否则程序中可能会出现资源泄漏 因为只会调用基类析构函数 而不会调用派生对象析构函数 我们还知道构造函数 析构函数纯粹是初始化 未初始化构造 而operator n
  • 在 Windows 服务中使用 OleDb 从 Excel 读取数据?

    免责声明 我知道这是一种不好的做事方式 这是我们与客户的唯一选择 Problem 我们需要每隔 x 时间从 Excel 文件读取数据 数据通过第三方 Excel 插件不断变化 应用程序的环境是 Windows XP SP1 和 Net 2
  • VS2010中VSHost.exe不断启动

    我正在 VS2010 中使用一个包含大量项目的解决方案 但它不断变得无响应 我注意到的一件事可能是一条线索 尽管我尚未开始任何调试 但 MyApplicationName vshost exe 不断出现在进程列表中 也许每当构建发生时它就会
  • 测试从 ComboBox 派生的自定义控件

    我创建了一个从 ComboBox 派生的控件 并希望对其行为进行单元测试 但是 它在我的单元测试中的行为似乎与实际应用程序中的行为不同 在实际应用程序中 Combobox DataSource 属性和 Items 同步 换句话说 当我更改
  • 第三方引用的 dll 未被复制来构建

    我有一个第三方 net dll 被我的 dll 类库项目 A 引用和使用 我的控制台应用程序项目 B 引用项目 A 我的问题是第三方 dll 没有被复制到控制台应用程序项目 B 的构建中 这里有什么问题呢 我的 dll 类库中引用的第三方
  • OpenMP 循环数组访问中的错误共享

    我想利用 OpenMP 来并行执行我的任务 我需要将数组的所有元素减去相同的数量并将结果写入另一个向量中 两个数组都是动态分配的malloc第一个填充了文件中的值 每个元素都有类型uint64 t pragma omp parallel f
  • 内存不足异常

    我正在使用 C 和 asp net 开发一个网络应用程序 我一直收到内存不足的异常 该应用程序的作用是从数据源读取一堆记录 产品 可能是数百 数千 通过向导中的设置处理这些记录 然后使用处理的产品信息更新不同的数据源 虽然有多个 DB 类
  • 嘲笑会员用户

    我目前正在开发一个 asp net mvc 2 应用程序 它使用默认的 SqlMembershipProvider 进行身份验证 我已经实现了一个控制器方法 通过调用读取当前用户的 ProviderUserKeyMembership Get
  • 如何在Windows Azure上调用ffmpeg.exe转换音频文件?

    我在 Windows Azure 上运行 Web 角色来接收 AAC 音频文件 通过 base64 字符串上传 并将它们存储到 blob 中 现在效果很好 接下来 我还必须将它们转换为 MP3 并将 MP3 存储到 blob 中 我决定使用
  • 是否有理由为什么用 XmlInclude 修饰的基类在序列化时仍然会抛出类型未知的异常?

    我将简化代码以节省空间 但所提供的内容确实说明了核心问题 我有一个类 它的属性是基类型 有 3 个派生类可以分配给该属性 如果我将任何派生类分配给容器并尝试序列化容器 XmlSerializer 会抛出可怕的错误 类型 x 不是预期的 使用
  • 在 C# 中为 ListBox 分配数据源时,如何从 ListBox 中删除所选项目?

    在 C 中为 ListBox 分配数据源时 如何从 ListBox 中删除所选项目 尝试删除时出现错误 设置 DataSource 属性后 无法修改项目集合 但是当我尝试从数据源 数据表 中删除项目时 它会抛出错误 因为 数据行不在当前行集
  • Task.Delay 到底是如何工作的?

    他们说 Task Delay 是一个异步 Thread Sleep 为了测试这一点 我写了下面的代码 我希望立即打印 One 然后 3 秒后将打印结果变量 15 2 秒后 将打印 Two 但似乎并非如此 一 不会立即打印 3 秒后打印 On
  • 更快的 WinSock sendto()

    我使用的是 Windows Server 2008 我的程序是用 C 编写的 我在 while true 循环中使用 WinSock2 和 sendto 来发送数据包 代码如下 while true if c snd gt max c sn
  • RC4 实现与 openssl 输出不匹配

    我的目标是在 C C 中实现 RC4 流密码 并确保它产生与使用时相同的输出openssl命令 按照伪代码维基百科 https en wikipedia org wiki RC4 该实现似乎有效 因为它可以加密和解密内容 但是 加密的输出与

随机推荐

  • 吃透Spring源码(九):Spring实例化(createBeanInstance)源码解析

    一 createBeanInstance 方法概述 createBeanInstance 是Spring实例化的核心代码 它根据不同的情况会调用四种实例化方法 obtainFromSupplier 通过Supplier实例化 instant
  • 2021年最新IT职业技能全套图谱

    2021年最新IT职业技能图谱出炉 如图 包含各个方向 各个专业 按照以上技能图谱学习 保证你拿高薪
  • 解决ROS系统 rosdep update超时问题的新方法

    由于近期国内Github Raw的可用IP越来越少 通过修改hosts文件解决rosdep update超时问题的方法已经不太好用 本文通过修改rosdep源码中下载资源的函数来解决这一问题 网站https ghproxy com 支持gi
  • c++时间戳获取和转换

    1 使用api 可以使用windows下和linux下api函数来获取 比较简单 如下所示 int64 t getTimeStamp 毫秒数 int mSecond 0 if defined WIN32 SYSTEMTIME sys Get
  • video-player实现hls播放全过程

    安装依赖 npm install vue video player save 引入样式 第一个是videoJs的样式 后一个是vue video player的样式 因为考虑到我其他业务组件可能也会用到视频播放 所以就放在了main js内
  • typeScript--[数据定义]

    一 安装ts 1 命令行运行如下命令 全局安装 TypeScript npm install g typescript 2 安装完成后 在控制台运行如下命令 检查安装是否成功 tsc V 二 创建ts文件 1 创建一个day01 ts文件
  • Linux·C/C++主线程对子线程的影响

    这篇文章主要介绍了简单了解C语言中主线程退出对子线程的影响 文中通过示例代码介绍的非常详细 对大家的学习或者工作具有一定的参考学习价值 需要的朋友可以参考下 对于程序来说 如果主进程在子进程还未结束时就已经退出 那么Linux内核会将子进程
  • Android几种定时任务实现方式汇总

    目录 前言 方式一 AlarmManager API19之前AlarmManager常用的一些方法 参数说明 使用举例 AlarmManager实例Demo讲解 包含版本适配以及高版本设置重复闹钟 AlarmManager总结 方式二 Ha
  • 设计模式——责任链

    本文说明 在学习 Java EE互联网轻量级框架整合开发 此书时 里面提到了几种设计模式 我在学习这几种设计模式时写了笔记 放上来让大家共同学习 如果有错误 望指出 本章由两部分组成 1 基本概念 关键代码讲解 2 完整例子 基本概念 关键
  • WEB服务器如何确定哪个Servlet处理请求

    文章目录 一 WEB服务器 二 Servlet容器 三 Servlet生命周期 创建对象 初始化 处理请求 销毁 四 WEB服务器确定Servlet处理请求过程 一 WEB服务器 是指计算机和运行在它上面的服务器软件的总和 能提供网上信息浏
  • vue中实现ueditor上传图片遇到的几个问题及解决方案

    vue中实现ueditor上传图片功能 遇到的问题 初始化ue组件无法正常显示 无法加载 单图上传的图标变灰无法点击 or 多图上传显示后端配置项没有正常加载 上传插件不能正常使用 配置上传接口错误 请求报404 无法找到 上传后 服务端显
  • QT 信号和槽需要注意的几点

    connect 发出信号的对象指针 SIGNAL 信号函数原型 响应信号的对象 SLOT 槽函数原型 这里先说说信号及槽与普通成员函数有什么区别 只是定义的区域不同而已 信号函数需要声明在头文件的signals 关键字后面 无需实现 而槽则
  • c语言的标识符必须以字母或下划线开头,大一C语言选择题及答案

    第1章 C语言程序设计概述 一 选择题 1 以下叙述中正确的是 A A C语言程序中注释部分可以出现在程序中任意合适的地方 B 花括号 和 只能作为函数体的定界符 C 构成C语言程序的基本单位是函数 所有函数名都可以由用户命名 D 分号是C
  • pandas 用read_csv读取txt文件时,部分行丢失

    用pandas 的 read csv 来读取txt文件时 出现了部分行丢失的情况 原因是某行中有单个英文引号 导致 n换行符失效 多行连成了一行 直到遇到下一个单个引号 例如 txt文件如下 这里有一个未闭合的引号 就是它 这是正常的第二行
  • 丑数 打表+二分查找

    1010 只包含因子2 3 5 的数 题目链接 http www 51nod com Challenge Problem html problemId 1010 引用知识 https baike baidu com item E4 B8 9
  • DevOps系列之 —— 持续开发与集成(六)静态代码检查

    DevOps系列之 DevOps概览 一 软件产业和交付模式发展趋势 DevOps系列之 DevOps概览 二 新型软件技术及交付模式 DevOps系列之 DevOps概览 三 DevCloud HE2E DevOps 框架及其主要服务 D
  • Python头歌合集(题集附解)

    目录 一 Python初识 基本语法 第1关 Hello Python 第2关 我想看世界 第3关 学好Python 第4关 根据圆的半径计算周长和面积 第5关 货币转换 二 turtle简单绘图 第1关 英寸与厘米转换 第2关 绘制等边三
  • java使用easyExcel实现Excel导入和导出

    1 引入依赖
  • CSV文件 分类

    org deeplearning4j examples dataexamples BasicCSVClassifier 数据格式 一定要搞清楚数据格式 输入输出 才能构建网络 对应的是你手头有什么 想要做什么 预测什么 训练日志 这个例子只
  • 第六章:string类

    系列文章目录 文章目录 系列文章目录 前言 为什么学习string类 C语言中的字符串 ASCII Unicode UTF 8 UTF 16 UTF 32 GBK 标准库中的string类 string类 总结 string类的常用接口说明