67.String管理

【C++ • STL】探究string的源码 浅拷贝、浅拷贝、string的模拟实现(传统和现代) 阅读详情

 

main.cpp

// 46.String管理.cpp : 定义控制台应用程序的入口点。
//

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
#include <string>
#include <stdexcept>
/*
string 构造函数
string();//创建一个空的字符串 例如: string str;
string(const string& str);//使用一个string对象初始化另一个string对象
string(const char* s);//使用字符串s初始化
string(int n, char c);//使用n个字符c初始化

3.1.2.2 string基本赋值操作
string& operator=(const char* s);//char*类型字符串 赋值给当前的字符串
string& operator=(const string &s);//把字符串s赋给当前的字符串
string& operator=(char c);//字符赋值给当前的字符串
string& assign(const char *s);//把字符串s赋给当前的字符串
string& assign(const char *s, int n);//把字符串s的前n个字符赋给当前的字符串
string& assign(const string &s);//把字符串s赋给当前字符串
string& assign(int n, char c);//用n个字符c赋给当前字符串
string& assign(const string &s, int start, int n);//将s从start开始n个字符赋值给字符串

*/

void test01()
{
	string str; //默认构造
	string str2(str); //拷贝构造
	string str3 = str;

	string str4 = "abcd";
	string str5(10, 'a');

	cout << "str4===" << str4 << endl;//str4===abcd
	cout << "str5===" << str5 << endl;//str5===aaaaaaaaaa

	//基本赋值
	str = "hello";
	str2 = str4;

	//string& assign(const char *s, int n);//把字符串s的前n个字符赋给当前的字符串
	str3.assign("abcdef", 4);
	cout << "str3===" << str3 << endl;//str3===abcd


	//string& assign(const string &s, int start, int n);//将s从start开始n个字符赋值给字符串
	string str6;
	str6.assign(str, 1, 3); //ell ? hel 从0索引

	cout << "str6===" << str6 << endl;//str6===ell
}


/*
string存取字符操作
char& operator[](int n);//通过[]方式取字符
char& at(int n);//通过at方法获取字符

*/
void test02()
{
	string s = "hello world";

	for (int i = 0; i < s.size(); i++)
	{
		//cout << "s[i]" << s[i] << endl;
		cout << s.at(i) << endl;
	}
	//[] 和at区别?[]访问越界  直接挂掉 at会抛出异常

	try
	{
		//cout << s[100] << endl;//报错
		cout << s.at(100) << endl;//invalid string position
	}
	catch (out_of_range & e)
	{
		cout << e.what() << endl;
	}
	catch (...)
	{
		cout << "越界异常" << endl;
	}
}

/*
string拼接操作
string& operator+=(const string& str);//重载+=操作符
string& operator+=(const char* str);//重载+=操作符
string& operator+=(const char c);//重载+=操作符
string& append(const char *s);//把字符串s连接到当前字符串结尾
string& append(const char *s, int n);//把字符串s的前n个字符连接到当前字符串结尾
string& append(const string &s);//同operator+=()
string& append(const string &s, int pos, int n);//把字符串s中从pos开始的n个字符连接到当前字符串结尾
string& append(int n, char c);//在当前字符串结尾添加n个字符c

3.1.2.5 string查找和替换
int find(const string& str, int pos = 0) const; //查找str第一次出现位置,从pos开始查找
int find(const char* s, int pos = 0) const;  //查找s第一次出现位置,从pos开始查找
int find(const char* s, int pos, int n) const;  //从pos位置查找s的前n个字符第一次位置
int find(const char c, int pos = 0) const;  //查找字符c第一次出现位置
int rfind(const string& str, int pos = npos) const;//查找str最后一次位置,从pos开始查找
int rfind(const char* s, int pos = npos) const;//查找s最后一次出现位置,从pos开始查找
int rfind(const char* s, int pos, int n) const;//从pos查找s的前n个字符最后一次位置
int rfind(const char c, int pos = 0) const; //查找字符c最后一次出现位置
string& replace(int pos, int n, const string& str); //替换从pos开始n个字符为字符串str
string& replace(int pos, int n, const char* s); //替换从pos开始的n个字符为字符串s

*/

void test03()
{
	//拼接
	string s1 = "我";
	string s2 = "爱北京";
	s1 += s2;
	cout << s1 << endl;//我爱北京
	s1.append("天安门");

	cout << s1 << endl;//我爱北京天安门

	//find查找

	string s = "abcdefg";
	int pos = s.find("bcf"); //找不到返回是 -1
	cout << "pos = " << pos << endl;

	int pos2 = s.rfind("bc"); //rfind  和find 结果一样,内部查找顺序相反
	cout << "pos2 = " << pos2 << endl; // pos = 1


	//替换
	string s3 = "hello"; //替换从pos开始n个字符为字符串str
	s3.replace(1, 3, "1111");
	cout << s3 << endl; // h1111o


}

/*
string比较操作
/*
compare函数在>时返回 1,<时返回 -1,==时返回 0。
比较区分大小写,比较时参考字典顺序,排越前面的越小。
大写的A比小写的a小。

int compare(const string &s) const;//与字符串s比较
int compare(const char *s) const;//与字符串s比较
*/

void test04()
{
	string s1 = "abc";
	string s2 = "abcd";
	//输出:s1 小于 s2
	if (s1.compare(s2) == 0)//比较ACSLL
	{
		cout << "s1 等于 s2" << endl;
	}
	else if (s1.compare(s2) == 1)
	{
		cout << "s1 大于 s2" << endl;
	}
	else
	{
		cout << "s1 小于 s2" << endl;
	}

}


/*
string子串
string substr(int pos = 0, int n = npos) const;//返回由pos开始的n个字符组成的字符串

*/

void test05()
{
	string s1 = "abcde";

	string s2 = s1.substr(1, 3);
	cout << "s2 = " << s2 << endl;//s2 = bcd

	//需求  查找一个右键的 用户名
	string email = "zhangtao@sina.com";

	int pos = email.find("@");//8 
	cout << "pos " << pos << endl;//pos 8

	string usrName = email.substr(0, pos);
	cout << "用户名为:" << usrName << endl;//用户名为:zhangtao
}


/*
string插入和删除操作
string& insert(int pos, const char* s); //插入字符串
string& insert(int pos, const string& str); //插入字符串
string& insert(int pos, int n, char c);//在指定位置插入n个字符c
string& erase(int pos, int n = npos);//删除从Pos开始的n个字符

*/

void test06()
{
	string s1 = "hello";
	s1.insert(1, "111");
	cout << s1 << endl; //h111ello

	//删除 111
	s1.erase(1, 3);
	cout << s1 << endl;//hello

}


/*
string和c-style字符串转换
*/

void func(string s)
{
	cout << s << endl;
}

void func2(const char * s)
{
	cout << s << endl;
}

void test07()
{
	string s = "abc";
	//string -> const char *转换成c风格的字符串

	const char * p = s.c_str();

	func(p); //const char * 隐式类型转换为 string

	//const char * -> string 

	string s2(p);
	//func2(s2); //string 不能隐式类型转换为 char * 
}

void test08()
{
	string s = "abcdefg";
	char& a = s[2];
	char& b = s[3];

	a = '1';
	b = '2';

	cout << s << endl;//ab12efg
	cout << (int*)s.c_str() << endl;//输出是地址:ab12efg

	s = "pppppppppppppp";

	a = '1';
	b = '2';

	cout << s << endl;//pppppppppppppp
	cout << (int*)s.c_str() << endl;//输出是地址004FFC70

}

/*
写一个函数,函数内部将string字符串中的所有小写字母都变为大写字母。
*/

void test09()
{
	string s = "abCdEfg";

	for (int i = 0; i < s.size(); i++)
	{
		//s[i] = toupper(s[i]);

		//全变小写
		s[i] = tolower(s[i]);
	}

	cout << s << endl;//abcdefg
}

int main(){

//test01();

	//test02();

	//test03();

	//test04();

	//test05();

	//test06();

//test07();

	//test08();

	test09();

	system("pause");
	return EXIT_SUCCESS;
}

 

DeepSeek 67B:量化领域专用大模型的工程化实践 大语言模型(LLM)正从通用理解走向垂直领域深度适配,其核心在于将领域知识、推理能力与生产级部署能力三者融合。量化金融作为对逻辑严谨性、低延迟响应和可复现性要求极高的典型场景,催生了DeepSeek 67B这类以实盘数据驱动、面向代码生成与策略推理优化的专用大模型。它并非简单叠加参数规模,而是通过定制化tokenizer、RoPE内核优化、MoE通信调度等底层工程改造,实现数学推理、时序信号识别与Python代码生成的协同增强。在VS Code插件、因子调试Agent、本地化微调等真实工作流中,该模型展现出 阅读详情

相关推荐

React Native 0.67与Swift项目混合开发实践指南

混合开发模式在现代移动应用开发中越来越普遍,它结合了原生应用的性能和跨平台开发的效率。React Native(RN)作为主流的跨平台框架,通过JavaScript Core与原生代码通信,实现了高效的UI渲染和业务逻辑复用。在iOS开发中,将RN模块集成到现有Swift项目可以显著提升开发效率,同时保持原生应用的性能优势。本文以RN 0.67版本为例,详细介绍了与Swift项目的集成方法,包括环境配置、CocoaPods依赖管理、原生模块通信等关键技术点。通过实际工程实践,开发者可以快速掌握如何解决常见的

weixin_30621959的博客 347

String 容器

字符串常用操作

m0_60492395的博客 581

Java字符串三剑客:String、StringBuilder、StringBuffer原理与实战选型

字符串拼接是Java基础开发中最常见也最易出错的操作之一,其性能瓶颈往往源于内存分配策略与对象生命周期管理。理解String的不可变性设计、StringBuilder的无锁高效拼接、StringBuffer的同步机制,本质是掌握JVM字符串常量池、堆内存布局及字节码生成逻辑。从编译期优化(如+号转StringBuilder)到运行时扩容(newCapacity = old*2+1),再到线程安全模型(synchronized粒度与ThreadLocal替代),技术价值体现在GC压力降低、CPU利用率优化和响

weixin_34396103的博客 386

STL-常用容器

/如果容器变短,则末尾超出容器容器长度的元素被删除。//如果容器变短,则末尾超出容器长度的元素被删除。//如果容器变短,则末尾超出容器长度的元素被删除。链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的。由于链表的存储方式并不是连续的内存空间,因此链表list中的迭代器只支持前移和后移,属于双向迭代器。节点的组成:一个是存储数据元素的数据域,另一个是存储下一个节点地址的指针域。中控器维护的是每个缓冲区的地址,使得使用deque时向一片连续的内存空间。

m0_64703222的博客 1455

C# String底层原理与高性能实践指南

String是.NET中最常用却最易被误解的基础类型,其本质是不可变的引用类型,依赖JIT深度优化实现高性能。理解其内存布局(含长度字段、字符偏移)、驻留机制与编译期常量折叠,是规避GC风暴和文化比较陷阱的前提。String的‘值语义’假象源于==运算符对引用相等性的优先判断,而真实比较需显式指定StringComparison.Ordinal。在高并发、低延迟场景中,Span<char>、string.Create和ArrayPool<char>构成零分配字符串处理的核心技术栈,可显著降低堆压力与延迟。本

as2886089的博客 394

BEVFusion实战:从零搭建LiDAR-Camera融合的3D目标检测环境(附避坑指南)

本文提供了BEVFusion实战指南,详细讲解如何从零搭建LiDAR-Camera融合的3D目标检测环境。内容涵盖环境配置、数据预处理、模型训练与性能优化等关键步骤,并附有实用的避坑技巧,帮助开发者高效部署这一先进的BEV感知算法。

p4q5r6s7t的博客 514

C++STL学习笔记--------string

C++STL学习笔记--------string #include <iostream> #include <string> using namespace::std; //string构造 /* string构造函数 构造函数原型: string(); //创建一个空的字符串 例如: string str; string(const char* s); //使用字符串s初始化 string(const string& str); //使用一个string对象初始化另一个s

weixin_45465612的博客 593

GAMIT基线解算实战:从RINEX数据准备到精度报告解读(附2024年tables更新攻略)

本文详细解析了2024年GAMIT基线解算全流程,从RINEX数据准备到精度报告解读,特别更新了tables配置攻略。涵盖工程目录设计、数据预处理、关键配置文件更新及基线解算策略优化,帮助用户掌握高精度GNSS数据处理技术,提升解算效率和结果可靠性。

weixin_42520374的博客 305

【C++】STL的string容器介绍

在c语言中,我们常使用char*的字符串,而在c++中,我们使用c++标准程序库中的string类,因为它和前者比较起来,不用担心内存是否足够、字符串长度等等,而且作为一个类出现,它集成的操作函数足以完成我们大多数情况下的需要。同时string类内部封装了很多成员函数,例如:查找find,拷贝copy,删除delete,替换replace,插入insert等等。 在我们编写的程序中使用string容器,需要包含头文件: #include

sakura0908的博客 651

【大模型微调】魔搭社区GPU进行LLaMA-Factory微调大模型自我认知

本教程介绍如何使用魔搭社区GPU资源和LLaMA-Factory工具进行大模型微调。主要内容包括环境配置、工具安装、模型训练和效果评估。通过LoRA算法进行自我认知微调,详细说明了从数据准备到模型导出的完整流程,并提供了参数调优和显存管理等实用技巧,帮助读者快速掌握大模型定制化训练方法。

LChuck的博客 2928

大模型训练方法全面解析:SFT、RFT、TRPO、DPO、PPO、GRPO、RLH、RLHF技术深度剖析

大模型训练方法全面解析 本文系统介绍了当前主流的大模型训练和对齐技术,包括监督微调(SFT)、拒绝采样微调(RFT)、信任域策略优化(TRPO)、直接偏好优化(DPO)、近端策略优化(PPO)等。这些方法各有特点:SFT简单高效但数据依赖性强;RFT通过质量筛选提升输出质量;TRPO训练稳定但计算复杂;PPO是RLHF核心算法,平衡探索与利用。文章详细分析了各方法的实现原理、优势劣势及适用场景,为开发者选择合适的大模型训练策略提供参考。

2796

java String类(超详细!)

一、前言 1、String表示字符串类型,属于 引用数据类型,不属于基本数据类型。 2、在java中随便使用 双引号括起来 的都是String对象。 例如:“abc”,“def”,“hello world!”,这是3个String对象。 3、java中规定,双引号括起来的字符串,是 不可变 的,也就是说"abc"自出生到最终死亡,不可变,不能变成"abcd",也不能变成"ab" 4、在JDK当中双引号括起来的字符串,例如:“abc” "def"都是直接存储在“方法区”的“字符串常量池”当中的。 5、为什

一只小菜鸡 7万+

TensorRT的安装:一步一步教会你如何安装TensorRT

TensorRT(Tensor Runtime)是由NVIDIA开发的一个用于深度学习推理(inference)优化的库,它可以在NVIDIA的GPU上加速神经网络模型的推理过程,从而提高模型的性能和效率。安装完成后,需要将CUDA的安装路径添加到系统环境变量中,以便系统能够找到CUDA的库文件。根据你安装的CUDA版本,将CUDNN的库文件复制到CUDA的安装目录中。要使用TensorRT,首先需要安装NVIDIA的CUDA和cuDNN库,并根据NVIDIA官方文档安装TensorRT。

Science prince的博客 2373

Windows 专业版怎么开多用户远程桌面?rdpwrap.ini 手把手完整指南

你人在公司,家里电脑正被家人用着。你想远程连回去拿一份文件,连接窗口却只给你两个选择:结束对方的会话,或者放弃。 这不是你设置没做好。Windows 专业版的远程桌面,默认只给整机留一个会话席位,先到先得。而 **rdpwrap.ini** 就是让 **Windows 专业版支持多用户远程桌面** 的那套配置文件库:每个 Windows 版本对应一份配置,告诉工具在这个版本上该怎么改远程桌面组件

gitblog_00815的博客 1087

Vue3 - 实现集成配置百度语音识别转文字,长按或开启录音并将录音文件实时转换为文字,上传音频文件利用百度语音识别API转换为文本并展示(vue3百度智能云API实现上传录音文件并转换成文字案例)

vue3对接百度智能云语音识别,vue3 h5移动端网页中实现语音识别,百度语音识别录音转文字_百度智能云,vue3如何使用百度语音识别,如何将语音转文字,使用vue3实现录音并将录音转换为文字,vue3如何实现语音输入功能功能,vue3集成百度智能云API实现录音转文字详细教程完整示例代码demo,VUE3使用百度语音识别语音转文字,vue调用百度语音识别,vue3百度语音识别文字并展示功能,vue3免费语音转文本api,百度语音识别申请配置教程,Vue3项目配置自定义界面百度语音识别转文字和原生使用方式

🏆 前端领域优质创作者 2728

Pytorch CIFAR10图像分类 EfficientNet v1篇

EfficientNet源自Google Brain的论文EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks. 从标题也可以看出,这篇论文最主要的创新点是. 论文提出了,混合缩放,把网络缩放的三种方式:深度、宽度、分辨率,组合起来按照一定规则缩放,从而提高网络的效果。EfficientNet在网络变大时效果提升明显,把精度上限进一步提升,成为了当前最强网络。

风信子的猫Redamancy的快乐星球 1852

String a;String a=null;String a=““的区别

一、问题描述 很多人在定义一个String类型的变量时会用到以下的方式 String a;String a=null;String a="" 那么这三种有什么区别呢; 二、String a; String a 只是在栈中声明了一个a的内存地址,并没有给它赋初值,也就是在没有在堆内存中申请内存地址,更没有在堆内存指向引用地址; 三、String a=null 在栈中声明了一个a的内存地址,在堆中也申请了一个内存地址,但是堆中的地址不指向任何栈里的引用地址 四、String a=“”

bird_tp的博客 5769

Centos 7 Linux 安装单机 Hadoop(HDFS):下载、安装、配置、测试

本文详细介绍了在 CentOS 7 系统上安装与配置单机 Hadoop(HDFS)的完整流程,涵盖 JDK 环境准备、Hadoop 安装包下载与部署、核心配置文件(core-site.xml、hdfs-site.xml 等)修改、SSH 免密登录设置、HDFS 格式化及服务启动,并通过命令行与 Web 界面验证 HDFS 和 YARN 功能,适合 Hadoop 初学者快速搭建本地测试环境。

寒水馨 · 轻量级技术文档 · hanshuixin.org 3237

c++中string的用法

String 容器 1.string的基本概念 string是c++风格的字符串,用法上和c语言的char *差不多 但是从本质上并不一样 string是c++中STL(Standard Template Library) 中的一个容器 **string本质上是一个类** string和char * 区别: char * 是一个指针 string是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器。 **特点:** string内部有很多的操作,如赋值,拼接,查找替换

weixin_51675700的博客 2万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

进一步了解String

今天看到了你真的了解.NET中的String吗? 的文章,写的很不错,对string不错的说明,但是有几点我想补充一下,一旦你的string在堆中创建后,其在内存中都是以const存在,任何的修改都会使其被重新创建为新的string,而指向以前的string的引用将会指向这个新的string!!测试1:看下面的代码:1string s = "1";2Console.WriteLine( Strin

lixianhuei的专栏 1135

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

rari的Rust原生缓存机制:如何实现比Next.js快67倍的吞吐量

rari是一款基于Rust运行时的高性能React Server Components框架,通过其创新的Rust原生缓存机制,实现了比Next.js快18.1倍的响应时间(0.12ms vs 2.17ms)和67.4倍的吞吐量(97,826 vs 1,452 req/sec),同时保持零配置的便捷性。 ## 为什么传统缓存方案无法满足现代Web应用需求? 在传统的React应用开发中,缓存机制

gitblog_00538的博客 665

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

React Native 0.67与Swift混合开发集成指南

混合开发模式结合了原生应用的性能优势和跨平台框架的开发效率,成为现代移动开发的重要趋势。React Native作为主流跨平台框架,通过JavaScriptCore引擎实现与原生平台的通信,其桥接机制允许开发者复用现有原生模块。在iOS开发中,将React Native集成到Swift项目需要处理环境配置、依赖管理和原生交互等关键技术点。本文以React Native 0.67与Swift集成为例,详细解析CocoaPods依赖配置、Xcode工程适配以及双端通信方案,特别针对Xcode 15的C++17兼

weixin_34060299的博客 362

String在java内存_[Java]String内存陷阱简介

String 方法用于文本分析及大量字符串处理时会对内存性能造成一些影响。可能导致内存占用太大甚至OOM。一、先介绍一下String对象的内存占用一般而言,Java 对象在虚拟机的结构如下:•对象头(object header):8 个字节(保存对象的 class 信息、ID、在虚拟机中的状态)•Java 原始类型数据:如 int, float, char 等类型的数据•引用(reference)...

weixin_39665379的博客 301

String 的使用

package cn.ekgc.javasenior.day20210624; import java.util.Arrays; public class StringDemo01 { public static void main(String[] args) { /* * 1、在 Java 中,代表“字”这个概念的是 char 类型。 * 2、char 的本质就是一个 16 位的无符号整数。 * 3、计算机字符的发展: * (1)对于计算机本身来说,并不存在字、数字等.

m0_60322480的博客 248

RN 0.67与Swift混合开发实战指南

React Native(RN)作为一种跨平台开发框架,通过与原生语言(如Swift)的混合开发模式,显著提升了移动应用的开发效率和性能表现。其核心原理基于JavaScript与原生模块的桥接通信,实现动态加载与原生控件的无缝集成。在工程实践中,这种混合架构特别适合需要快速迭代功能模块的中大型应用,例如电商平台的商品详情页等高频更新场景。本文以RN 0.67与Swift项目融合为例,详细解析了Xcode 15+环境下的Podfile配置、桥接层实现方案以及性能优化技巧,其中涉及Folly编译错误解决方案和R

weixin_34133829的博客 433

JAVA_String

字符串对象创建后不能被改变 String s = "asd"; String s1 = "asd"; String s2 = new String("asd") System.out.println(s==s1); // true System.out.println(s==s2); // false System.out.println(s.equals(s2); // true 字符串存储在字符串常量池中,首先来到s他在常量池里找有没有abc,没有则创建一

bao__zao的博客 149
上一篇: 66.三大组建
下一篇: 68.vector容器
augfun
博客等级 码龄10年 311粉丝 662原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值