【小梦C嘎嘎——启航篇】string介绍以及日常使用的接口演示

news2025/1/23 4:49:18

【小梦C嘎嘎——启航篇】string 使用😎

  • 前言🙌
    • C语言中的字符串
    • 标准库中的string类
    • string 比较常使用的接口
    • 对上述函数和其他函数的测试代码演示:
  • 总结撒花💞

追梦之旅,你我同行

   
😎博客昵称:博客小梦
😊最喜欢的座右铭:全神贯注的上吧!!!
😊作者简介:一名热爱C/C++,算法等技术、喜爱运动、热爱K歌、敢于追梦的小博主!

😘博主小留言:哈喽!😄各位CSDN的uu们,我是你的博客好友小梦,希望我的文章可以给您带来一定的帮助,话不多说,文章推上!欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!😘
在这里插入图片描述

前言🙌

    哈喽各位友友们😊,我今天又学到了很多有趣的知识现在迫不及待的想和大家分享一下! 都是精华内容,可不要错过哟!!!😍😍😍

C语言中的字符串

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

标准库中的string类

  1. string是表示字符串的字符串类
  2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。
  3. string在底层实际是:basic_string模板类的别名,typedef basic_string<char, char_traits, allocator> string;
  4. 不能操作多字节或者变长字符的序列。在使用string类时,必须包含#include头文件以及using namespace std;

string 比较常使用的接口

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

对上述函数和其他函数的测试代码演示:

#include<iostream>
#include<string>
using namespace std;


void Teststring1()
{
	string s1;
	string s2("hello bit");
	string s3(s2);
	string s4(s2.begin(), s2. end());
	s1 = "abcdef";
	
	cout << s1 << endl;
	cout << s2 << endl;
	cout << s3 << endl;
	cout << s4<< endl;



}

void test_string3()
{
	string s1("hello world");
	string s2 = "hello world";
	for (size_t i = 0; i < s1.size(); i++)
	{
		cout << s1[i] << " ";
	}
	cout << endl;

	string::iterator it = s1.begin();
	while (it != s1.end())
	{
		cout << *it << " ";
		it++;
	}
	cout << endl;

	for (auto ch : s2)
	{
		cout << ch << " ";
	}
	cout << endl;
}


void func(const string & s)
{
	//string::const_iterator it = s.begin();
	//auto it = s.begin();
	//while (it != s.end())
	//{
	//	//*it = 'a';
	//	cout << *it << " ";
	//	it++;
	//}
	//cout << endl;

	//string::const_reverse_iterator rit = s.rbegin();
	/*auto rit = s.rbegin();
	while (rit != s.rend())
	{
		cout << *rit << " ";
		++rit;
	}
	cout << endl;*/

	auto rit = s.rbegin();
	while (rit != s.rend())
	{
		cout << *rit << " ";
		++rit;
	}
	cout << endl;
}

void test_string4()
{
	string s1("hello world");
	string s2 = "hello world";
	func(s1);

}


void test_string5()
{
	string s1("hello worldxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyy");

	string s2(s1);
	cout << s2 << endl;

	string s3(s1, 6, 5);
	cout << s3 << endl;

	string s4(s1, 6, 3);
	cout << s4 << endl;

	string s5(s1, 6);
	cout << s5 << endl;

	string s6(s1, 6, s1.size() - 6);
	cout << s6 << endl;

	string s7(10, 'a');
	cout << s7 << endl;

	string s8(++s7.begin(), --s7.end());
	cout << s8 << endl;

	s8 = s7;
	s8 = "xxx";
	s8 = 'y';
}


void test_string6()
{
	string s1("hello world");
	string s2 = "hello world";
	cout << s1.size() << endl;
	cout << s1.capacity() << endl;
	s1.clear();
	cout << s1.size() << endl;
	cout << s1.capacity() << endl;






}


void test_string7()
{
	string s;
	/*s.reserve(100);
	for (auto ch : s)
	{
		cout << ch << " ";
	}
	cout << endl;

	s.push_back('x');
	s.push_back('x');
	s.push_back('x');
	s.push_back('x');
	s += 'n';
	s += "bit helloc";
	for (auto ch : s)
	{
		cout << ch;
	}
	cout << endl;*/

	//size_t old = s.capacity();
	//cout << "初始" << s.capacity() << endl;

	//for (size_t i = 0; i < 100; i++)
	//{
	//	s.push_back('x');

	//	if (s.capacity() != old)
	//	{
	//		cout << "扩容:" << s.capacity() << endl;
	//		old = s.capacity();
	//	}
	//}

	//s.reserve(10);
	//cout << s.capacity() << endl;
	s = "hello bit";
	cout << s.size() << endl;
	cout << s.capacity() << endl;

	s.resize(10, 'a');
	cout << s << endl;
	cout << s.size() << endl;
	cout << s.capacity() << endl;

}

void test_string8()
{
	string s = "hello";
	s.append(" bit");
	cout << s << endl;
	string s3 = "hello";
	string s2;
	s2 = s3 + " bit";
	cout << s2 << endl;

	s2 += s2;
	cout << s2 << endl;

	//s += '#';
	//s += "hello";
	//s += ss;
	//cout << s << endl;

	//string ret1 = ss + '#';
	//string ret2 = ss + "hello";
	//cout << ret1 << endl;
	//cout << ret2 << endl;
}

void test_string9()
{
	std::string str("xxxxxxx");
	std::string base = "The quick brown fox jumps over a lazy dog.";

	str.assign(base);
	std::cout << str << '\n';

	str.assign(base, 5, 10);
	std::cout << str << '\n';
}


void test_string10()
{
	// 空格替换为20%
	std::string s2("The quick brown fox jumps over a lazy dog.");
	string s3;
	for (auto ch : s2)
	{
		if (ch != ' ')
		{
			s3 += ch;
		}
		else
		{
			s3 += "%20";
		}
	}

	for (auto ch : s3)
	{
		cout << ch;
	}
	cout << endl;

	printf("s2:%p\n", s2.c_str());
	printf("s3:%p\n", s3.c_str());

	swap(s2, s3);
	//s2.swap(s3);

	printf("s2:%p\n", s2.c_str());
	printf("s3:%p\n", s3.c_str());
}


void test_string11()
{
    string s1("test.cpp.tar.zip");
    //size_t i = s1.find('.');
    size_t i = s1.rfind('.');

    string s2 = s1.substr(i);
    cout << s2 << endl;

    //string s3("https://legacy.cplusplus.com/reference/string/string/rfind/");
    //string s3("ftp://www.baidu.com/?tn=65081411_1_oem_dg");
	string s3("https://leetcode.cn/problems/first-unique-character-in-a-string/submissions/");
    // 协议      https
    // 域名      leetcode.cn
    // 资源名    problems/first-unique-character-in-a-string/submissions/
	string sub1, sub2, sub3;
	i = s3.find(':');
	sub1 = s3.substr(0, i);
	cout << sub1 << endl;

	size_t len  = s3.find('/', i + 3);
	sub2 = s3.substr(i + 3, len - (i + 3));
	cout << sub2 << endl;
	sub3 = s3.substr(len + 1);
	cout << sub3 << endl;
}


void test_string12()
{
	std::string str("Please, replace the vowels in this sentence by asterisks.");
	std::size_t found = str.find_first_not_of("abc");
	while (found != std::string::npos)
	{
		str[found] = '*';
		found = str.find_first_not_of("abcdefg", found + 1);
	}

	std::cout << str << '\n';

	/*std::string str("Please, replace the vowels in this sentence by asterisks.");
	std::size_t found = str.find_first_of("abcd");
	while (found != std::string::npos)
	{
		str[found] = '*';
		found = str.find_first_of("abcd", found + 1);
	}

	std::cout << str << '\n';*/

}


int main()
{

	/*string s1, s2;
	cin >> s1 >> s2;
	cout << s1 << endl;
	cout << s2 << endl;*/


	string str;
	//cin >> str;
	getline(cin, str, '!');
	cout << str;

	/*size_t i = str.rfind(' ');
	if (i != string::npos)
	{
		cout << str.size() - (i + 1) << endl;
	}
	else
	{
		cout << str.size() << endl;
	}*/
	//Teststring1();
	//test_string2();
	//test_string3();
	//test_string4();
	//test_string5();
	//test_string6();
	//test_string7();
	//test_string8();
	//test_string9();
	//test_string11();
	//test_string12();
	return 0;
}

总结撒花💞

   本篇文章旨在分享的是string 使用知识。希望大家通过阅读此文有所收获
   😘如果我写的有什么不好之处,请在文章下方给出你宝贵的意见😊。如果觉得我写的好的话请点个赞赞和关注哦~😘😘😘

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

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

相关文章

好用的安卓手机投屏到mac分享

工具推荐&#xff1a;scrcpy github地址&#xff1a;https://github.com/Genymobile/scrcpy/tree/master mac使用方式 安装环境&#xff0c;打开terminal&#xff0c;执行以下命令&#xff0c;没有brew的先安装brew brew install scrcpy brew install android-platform-too…

Mybatis 源码 ① :开篇

文章目录 一、前言二、项目搭建三、自动装配四、总结 一、前言 Mybatis 官网 以及 本系列文章地址&#xff1a; Mybatis 源码 ① &#xff1a;开篇Mybatis 源码 ② &#xff1a;流程分析Mybatis 源码 ③ &#xff1a;SqlSessionMybatis 源码 ④ &#xff1a;TypeHandlerMybat…

ubuntu1804系统ROS1和ROS2一键装机

备忘一下ROS1和ROS2的一键装机 原网址:小鱼的一键安装系列 指令: wget http://fishros.com/install -O fishros && . fishros如果想同时安装ROS1和ROS2, 运行两次. fishros, 工具会自动将ROS1和ROS2放在不同的文件目录下 安装完每次打开终端时, 会提示选择ROS1还是RO…

【Linux】应用层协议

【Linux】应用层协议 文章目录 【Linux】应用层协议1、协议作用1.1 应用层需求1.2 协议分类 2、HTTP & HTTPS2.1 HTTP/HTTPS 简介2.2 HTTP工作原理2.3 HTTPS工作原理2.4 区别 3、URL3.1 编码解码3.2 URI & URL 4、HTTP 消息结构4.1 HTTP请求方法4.2 HTTP请求头信息 5、…

思维导图在线制作,10款好用的思维导图在线制作网站推荐!

思维导图的强大作用在于它以直观、易理解的图形方式展现信息&#xff0c;让复杂的内容变得简单明了&#xff0c;极大地提升了我们的学习和工作效率。与传统的手绘思维导图相比&#xff0c;在线思维导图制作工具更具有灵活性和实用性&#xff0c;它们提供了丰富的功能&#xff0…

00|Java中常见错误或不清楚

00. 多变量声明并初始化 同时声明同类型的多变量 String a "Hello", c "hello"; int x 5, y 5;01. 变量类型 01.0 浮点类型 默认是double类型&#xff0c;如果需要指定float类型&#xff0c;可以float f 1.0F; 01.1 类型装换 如果将大的类型转为…

立秋至 | 共建智慧城,秋日硕果时

一缕缕阳光洒向大地 一股股热浪迎面拂来 一声声虫鸣清脆悦耳 一片片黄叶轻声而落 一份份清凉沁入心间 一个个硕果接踵而至 跟随我们一起来回顾下 往期铭控小伙伴们 在助力建设智慧城市 做了哪些努力呢 都做了哪些项目呢 得到了多少客户的认可呢 Part 1 智慧消防 消防…

关于网络入侵检测领域使用Spark/Flink等计算框架做分布式

关于网络入侵检测领域使用Spark/Flink等计算框架做分布式 0、引言1 基于LightGBM的网络入侵检测研究2 基于互信息法的智能化运维系统入侵检测Spark实现3 基于Spark的车联网分布式组合深度学习入侵检测方法4 基于Flink的分布式在线集成学习框架研究5 基于Flink的分布式并行逻辑回…

【AHB】初识 AHB 总线

AHB 与 APB、ASB同属于 AMBA 总线架构规范&#xff0c;该总线规范由 ARM 公司提出。 目录 一、AHB 总线 二、AHB 总线组成 三、AHB 主从通信过程 一、AHB 总线 AHB&#xff08;Advanced High Performance Bus&#xff09;,意为高级高性能总线&#xff0c;能将微控制器&…

excel 下载方法封装

1.首先需要拿到后端返回的URL下载地址 2.写个下载方法 // url 接口返回的下载地址。例如&#xff1a;https://cancer-research.oss-cn-beijing.aliyuncs.com/yuance-platform-permission/校内共享数据导入模板.xlsx // name 文件名称 例如&#xff1a; 校内共享数据导入模板 /…

Pytorch安装教程:最新保姆级教程

目录 概述 重要的事情说三遍&#xff1a;不需要装cuda、不需要装cuda、不需要装cuda 1.查看自己NVIDIA版本 2.创建一个conda 环境 3.安装pytorch 本文意在帮助即将步入深入学习领域的学子 在这之前首先你需要安装好anaconda&#xff0c;不懂的可以下面这篇文章 最新Anaco…

探索人工智能 | 智能推荐系统 未来没有人比计算机更懂你

前言 智能推荐系统&#xff08;Recommendation Systems&#xff09;利用机器学习和数据挖掘技术&#xff0c;根据用户的兴趣和行为&#xff0c;提供个性化推荐的产品、内容或服务。 文章目录 前言核心机器学习为什么说机器学习是智能推荐系统的基础呢&#xff1f; 数据挖掘数据…

布置Zabbix监控

一、在 Web 页面中添加 agent 主机 1.1打开Zabbix的Web页面 2.2在 Web 页面中添加 agent 主机 二、在 Web 页面创建自定义监控项模板 2.1创建模版

3.1 Qt样式选择器

本期内容 3.1 样式选择器 3.1.1 Universal Selector (通用选择器) 3.1.2 Type Selector (类型选择器) 3.1.3 Property Selector (属性选择器) 3.1.4 Class Selector (类选择器) 3.1.5 ID Selector (ID选择器) 3.1.6 Descendant Selector (后裔选择器) 3.1.7 Chil…

励志长篇小说《周兴和》书连载之十四 守诚信身负巨债

守诚信身负巨债 天色阴霾。看样子又要下雨了吧&#xff1f; 周兴和强打精神&#xff0c;送走了来谈业务的几个客人后&#xff0c;一下就瘫倒在了藤椅上&#xff0c;一动也不想动——几个月来没日没夜的工作&#xff0c;十几天以来在高原的奔波&#xff0c;他太疲惫了&#xff…

【C与C++的相互调用方法】

C与C的相互调用方法 C与C为什么相互调用的方式不同C中调用CC中调用C致谢 C与C为什么相互调用的方式不同 C 和 C 之间的相互调用方式存在区别&#xff0c;主要是由于 C 和 C 语言本身的设计和特性不同。 函数调用和参数传递方式不同&#xff1a;C 和 C 在函数调用和参数传递方面…

【力扣每日一题】88. 合并两个有序数组 双指针 辅助数组 8.13打卡

文章目录 题目思路代码 题目 88. 合并两个有序数组 难度&#xff1a; 简单 描述&#xff1a; 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&am…

【Spark学习笔记】- 1Spark和Hadoop的区别

目录标题 Spark 是什么Spark and Hadoop首先从时间节点上来看:功能上来看: Spark or Hadoop Spark 是什么 Spark 是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。 Spark and Hadoop 在之前的学习中&#xff0c;Hadoop 的 MapReduce 是大家广为熟知的计算框架&…

每天一道leetcode:300. 最长递增子序列(动态规划中等)

今日份题目&#xff1a; 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,2,7] …

关于虚拟机网络故障的解决

关于虚拟机网络故障的解决 ⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计3077字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&#xff0c; 欢迎&#x1f44f;关注&#x1f440;【文末】我…