蓝桥杯-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;
}

相关文章
|
6月前
|
编译器 C++
【C++进阶】深入STL之string:模拟实现走进C++字符串的世界
【C++进阶】深入STL之string:模拟实现走进C++字符串的世界
44 1
|
7月前
|
算法 Linux C语言
【C++进阶(一)】STL大法以及string的使用
【C++进阶(一)】STL大法以及string的使用
|
编译器 C++ 容器
STL - string
STL - string
51 0
|
存储 C++ 容器
【剖析STL】String(二)
2.3.2string类对象的容量操作 本部分会介绍以下几个容器操作:
55 0
|
Linux C语言 C++
【C++】从string开始了解STL(下)
【C++】从string开始了解STL(下)
|
存储 算法 编译器
C++【STL】之string的使用
C++ STL string类常用接口详细讲解,干货满满!
93 0
C++【STL】之string的使用
|
机器学习/深度学习 存储 C语言
【C++初阶】六、STL---string
目录 一、为什么学习string类 1.1 C语言中的字符串 1.2 字符串在OJ面试中 二、标准库中的string类 2.1 string 介绍 2.2 编码格式 三、string 类常用接口 3.1 Member functions(成员函数) 3.1.1 构造函数(Construct) 3.1.2 赋值重载(operator=) ​编辑 3.1.3 string类对象的容量操作(Capacity) 3.1.4 string类对象的访问(Element access) 3.1.5 string对象的访问及遍历操作(Iterators) 3.1.5 strin
86 0
【C++初阶】六、STL---string
|
机器学习/深度学习 编译器 C++
【C++初阶】六、STL---string模拟实现
目录 一、模拟实现接口总览 二、string模拟实现 2.1 构造函数 2.2 析构函数 2.3 拷贝构造函数 2.3.1 传统写法 2.3.2 现代写法 2.4 赋值运算符重载 2.4.1 传统写法 2.4.2 现代写法 2.5 iterator 2.5.1 begin 2.6 Capacity 2.6.1 size 2.6.2 capacity 2.6.2 empty 2.6.3 reserve 2.6.4 resize 2.6.5 clear 2.7 Element access 2.7.1 operator[ ] 2.8 Modify 2.
69 0
【C++初阶】六、STL---string模拟实现
|
存储 算法 编译器
【C++初阶】九、STL---string/vector/list补充
目录 一、vs和g++下string结构说明 1.1 vs下string的结构 1.2 g++下string的结构 二、vector和list对比 2.1 vector优缺点 2.2 list优缺点 三、迭代器失效问题 四、list模拟实现 -&gt; 操作符重载问题
147 0
【C++初阶】九、STL---string/vector/list补充
|
算法 Linux C语言
【C++】STL简介 及 string的使用
【C++】STL简介 及 string的使用
112 0