蓝桥杯-STL-string

简介: 蓝桥杯-STL-string



上篇介绍了STL中的迭代器和vector,这次来介绍C++在STL中加入的string类型,对字符串常用的需求功能进行了封装,使得操作起来方便。

使用时需要加上#include<string>头文件

字符串定义

定义时于定义其他变量是一样的

其他变量定义:

int a;

字符串变量定义:

string st;

字符串初始化

初始化时也与其他变量一样直接进行赋值就行

st="abcd";或者string st="abcd";

字符串输入输出

字符串输出

输出时可以直接用cout输出:

#include<iostream>
#include<string>
using namespace std;
int main()
{
  string a;
  a = "abcd";
  cout << a;
    return 0;
}

结果如下

字符串输入

在需要输入的时候,也可以直接用cin来输入

#include<iostream>
#include<string>
using namespace std;
int main()
{
  string a;
  cin >> a;
  cout<<a;
    return 0;
}

结果如下

字符串访问

字符串访问的时候于数组的访问是一样的可以用下标来访问

#include<iostream>
#include<string>
using namespace std;
int main()
{
  string a;
  cin >> a;
  cout << a[2];
  return 0;
}

字符串拷贝=

字符串复制,拷贝——与其他变量复制一样,直接赋值就行

#include<iostream>
#include<string>
using namespace std;
int main()
{
  string a,b;
  cin >> a;
  b = a;
  cout << "a=" << a << endl;
  cout << "b=" << b << endl;
  return 0;
}

结果如下

字符串拼接

将两个字符串接连在一起,可以使用直接相加的方式,或者使用append(const char*str,int n)函数

直接相加

代码示例:

#include<iostream>
#include<string>
using namespace std;
int main()
{
  string a,b,c;
  cin >> a >> b;
  c = a + b;
  cout << endl;
  cout << "a=" << a << endl;
  cout << "b=" << b << endl;
  cout << "c=" << c << endl;
  return 0;
}

运行结果

append(const char*str,int n)

append是封装在string里面的函数,用来拼接两个字符串,append()函数里面的形参有两个,

1)需要拼接的常量字符串;

2)需要拼接字符串的长度;

这两个参数,可以只写const char *str,   也可以两个都写,下面是具体的代码示例:

#include<iostream>
#include<string>
using namespace std;
int main()
{
  string a,b;
  a = "hello ";
  
  cout << "拼接前:"<<endl;
  cout << "a=" << a << endl;
  a = a.append("sheep", 2 );
  cout << "拼接后(将sheep的前两个字符拼接到a(hello )):" << endl;
  cout << "a=" << a << endl;
  cout << endl;
  b = "hello ";
  cout << "拼接前:" << endl;
  cout << "b=" << b << endl;
  b = b.append("sheep");
  cout << "拼接后(将sheep全部拼接到b(hello )):" << endl;
  cout << "b=" << b << endl;
  return 0;
}

运行结果如下:

字符串比较

字符串比较时,可以直接用==,!=,<,<=,>,>=比较大小,比较规则是ASCII码,从第一个字符逐字开始比较;

这写符号比较时:是真的返回1,否则返回0;具体示例如下:

#include<iostream>
#include<string>
using namespace std;
int main()
{
  string a, b,c;
  a = "abc";
  b = "abc";
  c = "acb";
  cout <<"(a == b )——" <<(a == b) << endl;
  //对于这个来说,a,c的比较先是第一个字符的比较,相等后,比较第二个字符 ,字符b的ascII码值大于c的ascii码值
  //就结束比较的符合a<=c;
  cout <<"(a <= c)——" << (a <= c) << endl;
  cout <<"(a >= c)——" <<(a >= c) << endl;
  return 0;
}

运行结果如下

字符串长度length()/size()

获取字符串长度,通常用length()或者size(),都是获取字符串的实际长度,没有C语言里面的‘\0’

#include<iostream>
#include<string>
using namespace std;
int main()
{
  string a = "abcde";
  cout << a << endl;
  cout << "a.length()——" << a.length()<<endl;
  cout<<"a.size()——"<< a.size() << endl;
  return 0;
}

运行结果如下

字符串查找find(string str)

查找第一次出现的目标字符串通常运用find()函数,如果查找成功,则输出查找的第一个位置,否则返回-1;具体示例如下

#include<iostream>
#include<string>
using namespace std;
int main()
{
  string a = "abcdecd",b="cd";
  cout <<"查找abcdecd中的cd:——"<< a.find(b) << endl;
  cout <<"查找abcdecd中的ec:——" << a.find("ec") << endl;
  
  return 0;
}

运行结果如下

查找子串substr(int a,int b)

一般是查找当前字符串的子串,用substr(),substr()可以用两个参数,也可以用一个参数

substr(a,b)——一般是从a下标到b下标的子字符串

substr(a)——一般是从a下标到结尾的子字符串

#include<iostream>
#include<string>
using namespace std;
int main()
{
  string a = "abcdecd";
  cout << a<<endl<<endl;
  cout << "a.substr(2, 5)——"<<a.substr(2, 5) << endl;
  cout <<"a.substr(5)——"<< a.substr(5) << endl;
  cout << "a.substr(0,5)——"<<a.substr(0, 5);
  
  return 0;
}

字符串的大小写转换

大写转小写tolower(char a)

tolower(char a)只能对单个字符进行转换,转换完后记得强转---另外对小写字母自动跳过

#include<iostream>
#include<string>
using namespace std;
int main()
{
  string a = "ABCDE";
  cout << a << endl;
  for (int i = 0; i < a.size(); i++)
  {
    cout <<(char) tolower(a[i]);
  }
  
  return 0;
}

小写转大写toupper(char a)

toupper(char a)只能对单个字符进行转换,转换完后记得强转---另外对大写字母自动跳过

#include<iostream>
#include<string>
using namespace std;
int main()
{
  string a = "abcdA";
  cout << a << endl;
  for (int i = 0; i < a.size(); i++)
  {
    cout <<(char) toupper(a[i]);
  }
  
  return 0;
}

ASCII

大写字母比小写字母小——32

字符数字和整形数字相差——48

#include<iostream>
using namespace std;
int main()
{
  cout << "A——"<<(int)'A' << endl;
  cout << "Z——" << (int)'Z' << endl;
  cout << "a——" << (int)'a' << endl;
  cout << "z——" << (int)'z' << endl;
  cout << "a-A——" << (int)'a' - 'A' << endl;
  cout << "0——" << (int)'0' << endl;
  cout << "'1'-48——"<<'1' - 48 << endl;
  return 0;
}

相关文章
|
10月前
|
人工智能 弹性计算 运维
阿里云建站费用全解析:三种方案的价格、功能与选型指南
在数字化需求日益增长的当下,搭建网站成为个人展示、企业推广的重要途径。阿里云作为主流云服务提供商,针对不同技术基础与业务规模,推出 “自购服务器建站”“万小智 AI 模板建站”“云企业官网定制建站” 三种核心方案,价格从 38 元 / 年到数万元 / 年不等,覆盖从个人到中大型企业的全场景需求。本文基于今年最新官方定价与实测数据,从方案细节、价格体系、功能对比、场景适配等维度展开解析,为用户提供客观选型参考。
|
10月前
|
人工智能 自然语言处理 搜索推荐
企业AI客服系统建设费用大揭秘:免费系统能用吗?如何控制预算?
面对AI客服升级需求,企业需平衡成本与服务。免费系统适合小微企轻量入门,但功能有限;瓴羊、Salesforce、Zendesk及探域等高性价比方案,分别在全链路智能、全球化服务、电商垂直场景具优势。不同规模企业应结合咨询量、行业特性与预算,选择匹配的AI客服解决方案,实现服务与增长双提升。(239字)
|
10月前
|
存储 消息中间件 Apache
ZooKeeper 实战指南:从入门到场景解析
Apache ZooKeeper是分布式系统的协调核心,本文带你快速搭建环境,掌握Znode操作与Watcher机制,深入理解其在分布式锁、配置管理、服务发现等场景的应用,并解析美团Leaf中的实践案例。
1540 220
|
网络安全 数据安全/隐私保护 Windows
分享5款小众且无广告的小工具
推荐5款小众无广告软件:Krita(绘图)、WinSCP(文件传输)、燃精灵(微信检测)、GIDOT TYPESETTER(排版)、Sketchable(手绘笔记),功能强大且专注,提升创作与工作效率。
586 0
|
11月前
|
自然语言处理 JavaScript 前端开发
vue 插槽详解
本文系统讲解 Vue.js 插槽机制,涵盖默认插槽、具名插槽、作用域插槽及动态插槽等高级用法,结合代码示例与实际应用场景(如布局组件、表格、模态框),帮助开发者掌握组件内容分发的核心技术,提升组件复用性与灵活性。
739 8
|
10月前
|
安全 开发者 CDN
元旦快闪 | 每成功邀请1人,得3个ESA免费版额度,限时加码邀你共迎新年!
阿里云ESA元旦限时活动开启!邀请好友成功试用【ESA基础版】,奖励300%加码,每邀1人得3个免费版额度(原1个),数量无上限。活动时间:2025年12月31日16:00至2026年1月4日16:00。立即参与,助力网站高速访问,共享加速未来!
|
机器学习/深度学习 人工智能 监控
业余AI与专业AI的区别,就在这些评估指标上
如何知道你训练的AI模型是天才还是学渣?本文用轻松幽默的方式带你了解机器学习的各类评估指标,让你不仅能说出模型的好坏,还能找到改进的方向,避免在实际应用中翻车。
858 8
|
存储 关系型数据库 MySQL
什么是覆盖索引?
本章主要讲解了索引覆盖和回表的相关知识
549 0
|
敏捷开发 持续交付 项目管理
【软件工程】走近演化过程模型:软件开发的不断进化之路
【软件工程】走近演化过程模型:软件开发的不断进化之路
|
监控 安全 物联网
物联网卡应用中一些常见限制
物联网卡(IoT SIM卡)在实际应用中,除了APN配置的多样性外,还受到多种限制和约束。这些限制通常与网络运营商的政策、服务条款、技术实现以及安全需求紧密相关。以下是一些常见的物联网卡限制:

热门文章

最新文章