当前位置: 首页 > news >正文

「string」笔记

学习:比特鹏哥

1. string

string是一种类型,指的是字符串,比字符数组更高级

头文件  <string>

#include <string>

int main()
{
  string a;//未初始化
  string b = "good good";//初始化
  string c("good sfternoon");//初始化
  return 0;
}

可以直接把b中的字符串赋给c

eg. b = c;

①没有‘\0’作为结束标志

②每个元素都有下标,与字符数组类似,都从零开始

2. 输入

①cin

不能输入带有空格的字符串

②getline

头文件<string>

两种形式,能输入带有空格的字符串

#include <string>

int main()
{
①getline(cin,字符串名字);
②getline(cin,字符串名字,截至符号);
return 0;
}

①cin:从键盘输入;字符串名字:输入的数据放入到的字符串;到‘\n’停止(不包含‘\n’)

②cin:从键盘输入;字符串名字:输入的数据放入到的字符串;截至符号:可以自定义停止符号(到其停止,不包含‘它’)

3. 计算string类型字符串长度 size()

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

int main()
{
	string b = "dddd  sss";

	cout << b.size() << endl;
	
	return 0;
}

格式名:数组名.size()

4. 迭代器(iterator)

类似于指针,是一种对象。访问迭代器指向的值,需要解引用(*)

头文件 <string>

begin()与end()

string中的begin()与end()返回迭代器的类型:string :: iterator(用于作为其变量名的类型)

①begin():返回第一个字符所处的位置

②end(): 返回最后一个字符的下一个位置(此位置不属于字符串)

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

int main()
{
	string str = "holle world!";
	//迭代器的使用
	string::iterator it = str.begin();
	string::iterator it1 = str.end();
	cout << *it << endl;//解引用操作
	cout << *(--it1) << endl; 
	
	return 0;
}

这两个迭代器可以加或减某个数,也可相减,所以也可以用这两个迭代器逐个输出字符串

注意,相减只能分别定义再相减,定义一个变量一起减会报错:

	//正确
    string::iterator it1 = str.end();
	string::iterator it2 = str.begin();
	cout << it1-it2 << endl;  
	//错误
	string::iterator it = str.end() - str.begin();
    string::iterator迭代器中没有str.end() - str.begin()这种类型

5. push_back()   末尾添加一个

用于在字符串末尾添加一个字符

头文件 <string>

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

int main()
{
  string s;
  s.push_back('a');

  return 0;
}

 

6. pop_back()     末尾删去一个

删除字符串最后一个字符。如果是空字符还要删去,则会出错。

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

int main()
{
	//一个一个删去 
	string s = "hello word!";
	s.pop_back();
	cout << s << endl;
	s.pop_back();
	cout << s << endl;

    //循环删去 
    string s = "hello word!";
    for(int i = s.size();i>=0;i++)
    {
    	s.pop_back();
    	cout << s << endl;
	}
	
	return 0;
}

7. insert() 中间插入字符或字符串

在字符串中间某位置前插入字符或字符串

头文件  <string>

①变量名.insert(插入位置的下一个位置,插入的字符串);
②变量名.insert(插入位置的下一个位置,插入字符的数量,插入的字符);

8. +或+=操作

本质:string重载了operator操作符

9. find() 查询字符/字符串位置

头文件 <string>

寻找某一字符或字符串在另一字符串中位置,从所设定的初始位置开始(默认为零,从第一位开始寻找)。找到,返回该字符或字符串第一次出现的起始下标位置;未找到,返回npos(-1)

size_t 变量名 接收find()的返回值

①string类型变量名.find("字符串"/'字符'/另一个string类型变量名,(可不写,默认从零开始)开始查询位置);

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

int main()
{
	string s("good morning evergone! evergone? everyone!");
	//字符
	size_t n = s.find('o');
	cout << "查找o:" << n << endl;
	n = s.find('o',8);
	cout << "查找o第8位之后:" << n << endl;
	//字符串
	// 1 "dfe2wef"
	size_t n1 = s.find("on");
	cout << "查找on:" << n1 << endl;
	n1 = s.find("on",21);
	cout << "查找on第21位之后:" << n1 << endl;
	// 2 string str
	string str = "rgo";
	size_t n2 = s.find(str);
	cout << "查找rgo:" << n2 << endl;
	n2 = s.find(str,20);
	cout << "查找rgo第20位之后:" << n2 << endl;
	return 0;
}

②string类型变量名.find("字符串",开始查询位置,要查询字符的长度);

验证是否找到:

10. substr() 截取字符

头文件 <string>

截取字符串中指定位置指定长度的子串

string类型变量名.sbustr(pos,len);
//pos:默认为0,从第0位开始截取,可设定截取位置
//len:默认npos,一直截取字符串直到末尾,可设定截取长度
#include <iostream>
#include <string>
using namespace std;

int main()
{
	string s = "qwerty uijkolpd sunhsdns.";
	string t;
	cout << "初始t:" << endl; 

	//①s.substr()
	t = s.substr();
	cout << "不加参数:" << t << endl;

	//②s.substr(pos)
	t = s.substr(4);
	cout << "pos:" << t << endl;

	//③s.substr(pos,len)
	t = s.substr(4,6);
	cout << "pos,len:" << t << endl; 

	return 0;
 } 

11. 关系运算

'==','!=','>','<','>=','<='也同样适用于string类型的字符串进行比较,或者比较string类型和C语言风格字符串,但比较的两者中至少要有一个string类型的字符串

比较的不是字符串的长度,而是相对位置字符的ascall码值

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

int main()
{
	string s;
	string t;
	//输入 
	getline(cin,s);
	getline(cin,t);
	//比较 
	if(s>t) cout << "s>t" << endl;
	else if(s == t) cout << "s==t" << endl;
	else cout << "s<t" << endl; 
	return 0;
}

12. string类型字符串与数值的转换

①字符串转数值

数值均转成十进制

stoi()/stol()  stod()/stof()

头文件 <string>

1.1 实际上是把数值字符转换成数值,从第一个字符开始,遇到不符合要求的字符为止

1.2 stoi() 把字符串转换成int类型

     s--string to--转换成 i--int类型;

     以此类推,另外三个,l--ling long int类型;  d--double类型;  f--float类型;

1.3 格式

eg. stoi(string类型变量名,㈠接收不符合要求的字符的位置的变量的地址,㈡字符串中数值进制格式);

   ㈠接收不符合要求的字符的位置的变量的地址

     ⑴ 要用 size_t 变量名 来接收不符合要求的字符的位置

          这个东西实际上就是告诉我们,这串字符到第几位无法转换成数值了

     ⑵ 也可以不设置,直接写成NULL0

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

int main()
{
	string s = "01011aa9;9";
	size_t pow;
	int t = stoi(s,&pow);//默认值为十进制 
	cout << "t: " << t << endl;
	cout << "(一)pow:" << pow << endl; 
	
	return 0;
}

   ㈡字符串中数值进制格式

     ⑴ 不写,默认为字符串中字符为十进制形式

     ⑵ 若为2,则认为字符串中字符二进制形式,并且会被转成十进制形式输出,8,16也是如此

     ⑶ 若为0,则程序会猜测字符串中字符的进制形式,比如,若为0开头,会被认为是八进制;若            为0x开头,则会被认为是十六进制

②数值转字符串

to_string()就是把数值转换成string类型字符串

整型,浮点型都是可以使用

头文件 <string>

另:

1. isspace() 判断一个字符是否为空白字符

头文件 <cctype>

空白字符:空格和换行符

//统计除空白字符外的字符串个数 
#include <iostream>
#include <string>
#include <cctype>
using namespace std;

int main()
{
	string s;
	//输入 
	getline(cin,s);
	//统计 
	int t=0;
	for(auto e : s)
	{
		if(isspace(e))//遍历s中是否有字符为空白字符 
		continue;
		else t++;//统计除空白字符外的字符串个数
	 } 
	 //输出 
	 cout << t << endl;
	return 0;
}

2. reverse 字符串的逆序

void reverse(要反转字符串的第一个元素地址(迭代器),要反转字符串的最后一个元素地址(迭代器));

头文件 <algorithm>

 

 

 

 

 

相关文章:

  • 【每日学点HarmonyOS Next知识】swiper样式、日期选择、自定义弹窗键盘、文本组件换行、富文本适配
  • AI代理的高效助手:Composio工具集详解
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(二)
  • 《第三选择》:撕掉“非黑即白”,解锁人生隐藏副本✨
  • C++STL的六大部件和联系
  • 刷题记录(LeetCode 78 子集)
  • 聚焦两会:科技与发展并进,赛逸展2025成创新新舞台
  • 1-002:MySQL InnoDB引擎中的聚簇索引和非聚簇索引有什么区别?
  • Cline使用MCP-TypeScript版本
  • springboot 修复 Spring Framework 特定条件下目录遍历漏洞(CVE-2024-38816)
  • 时序和延时
  • Linux——system V共享内存
  • 电子电气架构 ---常见车规MCU安全启动方案
  • Python第十六课:深度学习入门 | 神经网络解密
  • Python与AI的深度渊源:从历史交融到技术革新
  • 【Zinx】Day5-Part4:Zinx 的连接属性设置
  • vue2项目开启br压缩
  • L1-017 到底有多二
  • C语言学习总结
  • ONLYOFFICE AI 功能升级:3月11日直播揭秘!
  • 网站开发 兼职/职业教育培训机构排名前十
  • 拍摄网/厦门seo排名
  • 上海手机网站制作公司/百度推广电话客服
  • 网站建设方案书安全性/seo课程
  • 设计页面图片/许昌网站seo
  • 深圳企业医疗网站建设/今日最新国内新闻