string

string封装了char*,管理这个字符串,是一个char*型的容器。


string的相关操作

头文件

#include<string>

string构造函数

string str;//创建一个空的字符串
string str1(str);//使用一个string对象初始化另一个string对象
string str2("hello");//使用字符串s初始化
string str3(3,'a');//使用n个字符c初始化

string基本赋值操作

string str1="hello";//char*类型字符串 赋值给当前的字符串      str1="hello"
string str2=str1;//把字符串s赋给当前的字符串 str2="hello"
string str3='a';//字符赋值给当前的字符串 str3="a"
str4.assign("hello");//把字符串s赋给当前的字符串 str4="hello"
str5.assign("hello",3);//把字符串s的前n个字符赋给当前的字符串 str5="hel"
str6.assign(str2);//把字符串s赋给当前字符串 str6="hello"
str7.assign(5,'a')//用n个字符c赋给当前字符串 str7="aaaaa"
str8.assign(str4,0,3)//将s从start开始n个字符赋值给字符串 str8="hel"
str9.assign("hello",0,3)//将s从start开始n个字符赋值给字符串 str9="hel"

string存取字符操作

str[i];//通过[]方式取字符  访问越界直接挂掉
str.at(i);//通过at方法获取字符 访问越界抛出异常

为了修改string字符串的内容,下标操作符[]和at都会返回字符的引用。但当字符串的内存被重新分配之后,可能发生错误.

string拼接操作

str+=str1;//重载+=操作符
str+="hello";//重载+=操作符
str+='a';//重载+=操作符
str.append("hello");//把字符串s连接到当前字符串结尾
str.append("hello",3);//把字符串s的前n个字符连接到当前字符串结尾
str.append(str,3);//这种写法错误[Error] no matching function for call to 'std::basic_string<char>::append(std::string&, int)'
str.append(str1);//同operator+=()
str.append(str1,0,3);//把字符串s中从pos开始的n个字符连接到当前字符串结尾
str.append("world",0,3);//把字符串s中从pos开始的n个字符连接到当前字符串结尾
str.append(3,'a');//在当前字符串结尾添加n个字符c

string查找和替换

str.find(str1,0); //查找str第一次出现位置,从pos开始查找,返回int下标
str.find("hello",2); //查找s第一次出现位置,从pos开始查找
int find(const char* s, int pos, int n) const; //从pos位置查找s的前n个字符第一次位置
str.find('a',0); //从pos位置查找字符c第一次出现位置
str.rfind(str1,0);//查找str最后一次位置,从pos开始查找
str.rfind("hello",2);//查找s最后一次出现位置,从pos开始查找
str.rfind("hello",0,3);//从pos查找s的前n个字符最后一次位置
str.rfind('a',0) const; //查找字符c最后一次出现位置
str.replace(0,3,str1); //替换从pos开始n个字符为字符串str
str.replace(0,3,"hello"); //替换从pos开始的n个字符为字符串s

string比较操作

/*
compare函数在>时返回 1,<时返回 -1,==时返回 0。
比较区分大小写,比较时参考字典顺序,排越前面的越小。
大写的A比小写的a小。
*/
str.compare(s);//与字符串s比较
str.compare("hello");//与字符串s比较

string子串

string str=str1.substr(0,3);//返回由pos开始的n个字符组成的字符串

string插入和删除操作

str.insert(2,"hello"); //插入字符串
str.insert(2,str1); //插入字符串
str.insert(1,3,'a');//在指定位置插入n个字符c
str.erase(1,3);//删除从Pos开始的n个字符

string和c-style字符串转换

//string 转 char*
string str = "itcast";
const char* cstr = str.c_str();
//char* 转 string
char* s = "itcast";
string str(s);

小练习

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

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

输出:HELLO

STL之string容器的更多相关文章

  1. 浅谈C++ STL string容器

    浅谈C++ STL string容器 本篇随笔简单讲解一下\(C++STL\)中\(string\)容器的使用方法及技巧. string容器的概念 其实\(string\)并不是\(STL\)的一种容 ...

  2. 2.2 C++STL string容器详解

    文章目录 引言 2.2.1 string的特性 2.2.2 string用法理论 2.2.2.1 string构造函数 2.2.2.2 string赋值操作 2.2.2.3 string取值操作 2. ...

  3. stl string 容器的使用

    string 是基本的字符串序列容器,对应数据结构中的串,和vector<char>也类似,但功能更多 string 容器的使用 1,string 的构造函数是. string() 2,s ...

  4. C++标准模板库(STL)和容器

    1.什么是标准模板库(STL)? (1)C++标准模板库与C++标准库的关系 C++标准模板库其实属于C++标准库的一部分,C++标准模板库主要是定义了标准模板的定义与声明,而这些模板主要都是 类模板 ...

  5. [C++]STL中的容器

    C++11 STL中的容器 一.顺序容器: vector:可变大小数组: deque:双端队列: list:双向链表: forward_list:单向链表: array:固定大小数组: string: ...

  6. STL中的容器

    STL中的容器 一. 种类: 标准STL序列容器:vector.string.deque和list. 标准STL关联容器:set.multiset.map和multimap. 非标准序列容器slist ...

  7. STL之map容器的详解

    一.关于map的介绍 map是STL的 一个容器,和set一样,map也是一种关联式容器.它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键 字的值)的数据 ...

  8. C++ STL 中 map 容器

    C++ STL 中 map 容器 Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它 ...

  9. 数据结构《19》----String容器的三种实现

    一.序言 一个简单的string 容器到底是如何实现的? 本文给出了 String 的三种从易到难的实现,涉及了 reference counting, copy on write 的技术. 二.第一 ...

随机推荐

  1. 如何安装Gephi工具

    gephi中文版是一款开源免费跨平台基于JVM的复杂网络分析软件,安装后需要安装Java jdk API,否则就会出现gephi打不开的情况 该工具主要用于各种网络和复杂系统,动态和分层图的交互可视化 ...

  2. Docker应用场景和局限性

    Docker有哪些好的特性?作为一种新兴的虚拟化方式,Docker跟传统的虚拟化方式相比具有众多的优势.首先, Docker容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多.其次, Docke ...

  3. 【非原创】codeforces 1063B Labyrinth 【01bfs】

    学习博客:戳这里 附本人代码: 1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 co ...

  4. codeforces 7B

    B. Memory Manager time limit per test 1 second memory limit per test 64 megabytes input standard inp ...

  5. MDK5生成BIn文件的方法

    配置MDK5 生成bin文件的 第一步:方法打开option for Target 第二步:选择 user 第三步:找到After Build/Rebuild 第四步:勾选run,点击文件选择小图标选 ...

  6. Apple Watch Series 6 字母图案 (图解教程)

    Apple Watch Series 6 字母图案 (图解教程) Apple Watch Series 6 自定义文字 如何开启 字母图案 solution 1 选择 彩色 表盘️ PS: 该复杂功能 ...

  7. API & YApi

    API & YApi 接口管理服务 YApi http://yapi.demo.qunar.com/ https://ued.qunar.com/ build bug https://gith ...

  8. http cache & 浏览器缓存,存储位置的优先级,条件?

    http cache & 浏览器缓存,存储位置的优先级,条件? memory cache disk cache 浏览器缓存,存储位置的优先级,条件, 机制,原理是什么? from memory ...

  9. image to cur (cursor icons)

    image to cur (cursor icons) mouse-cursor-pointer https://onlineconvertfree.com/convert-format/jpg-to ...

  10. outlook & email & animation

    outlook & email & animation tada position div