STL基础--String

String

构造

string s1("Hello");
string s2("Hello", 3); //s2: Hel
string s3(s1, 2); //s3: llo
string s4(s1, 2, 2); //s4: ll
string s5(5, ‘a‘); //s5: aaaaa
string s6({‘a‘, ‘b‘, ‘c‘}); //s6: abc

大小

s1="Goodbye"
s1.size(), s1.length()  //7
s1.capacity();
s1.reserve(100);
s1.reserve(5);  //s1: Goodbye, sizs()==7,capacity()>=7 不改变内容和size,只改变容量
s1.shrink_to_fit(); //改变容量到承载内容
s1.resize(9);  //s1: Goodbye\0\0
s1.resize(12, ‘x‘); //s1: Goodbye\0\0xxx
s1.resize(3); //s1: Goo

单元素访问

s1.at()会检查元素是否存在
s1[]不会检查
front, back, push_back, pop_back, begin, end

范围访问

string s2 = "Dragon Land";
s1.assign(s2);  // s1 = s2;
s1.assign(s2, 2, 4);  // s1: ago
s1.assign("Wisdom");
s1.assign("Wisdom", 3);  // s1: Wis
s1.assign(s2, 3);  // Error
s1.assign(3, ‘x‘);  // s1: xxx
s1.assign({‘a‘, ‘b‘, ‘c‘});  // s1: abc

s1.append(" def");  // s1: abc def
s1.insert(2, "mountain", 4);  // s1: abmounc def
s1.replace(2, 5, s2, 3, 3);  // s1: abgon def
s1.erase(1, 4);  // s1: a def
s2.substr(2, 4);  // agon

s1 = "abc";
s1.c_str();  // "abc\0"
s1.data();  // "abc" c++11中结尾也有\0

s1.swap(s2);

成员函数算法

s1 = "abcdefg";
char buf[20];
size_t len = s1.copy(buf, 3);   //  buf:abc     len == 3
len = s1.copy(buf, 4, 2);       //  buf:cdef    len == 4
s1 = "If a job is worth doing, it‘s worth doing well";
size_t found = s1.find("doing");    // found == 18
found = s1.find("doing", 20);       // found == 36
found = s1.find("doing well", 0);       // found == 36
found = s1.find("doing well", 0, 5);        // found == 18

found = s1.find_first_of("doing");      // found == 6
found = s1.find_first_of("doing", 10);      // found == 13
found = s1.find_first_of("doing", 10, 1);       // found == 18

found = s1.find_last_of("doing");       // found == 40
found = s1.find_first_not_of("doing");      // found == 0
found = s1.find_last_not_of("doing");       // found == 45

s1.compare(s2);
if (s1 > s2) {}  //当size很大时,expensive
s1.compare(3, 2, s2);

string ss = s1 + s2;  //当size很大时,expensive

非成员函数

cout << s1 << endl;
cin >> s1;
getline(cin, s1);       //‘\n‘
getline(cin, s1, ‘;‘);  //‘;‘

//数字转成string
s1 = to_string(8);
s1 = to_string(2.3e7);  // s1: 23000000.000000
s1 = to_string(0xa4);   // s1: 164
s1 = to_string(034);    // s1: 28

//string转数字
s1 = "190";
int i = stoi(s1);  //i == 190

s1 = "190 monkey";
size_t pos;
int i = stoi(s1, &pos);  //i == 190  pos == 3

s1 = "a monkey";
int i = stoi(s1, &pos);  // exception of invalid_argument
int i = stoi(s1, &pos, 16);  // i == 10

//stol, stod, stof, etc  以上函数只做简单string转换

//复杂格式使用stringstream

//lexical_cast()  //简单string转换

string和算法

s1 = "Variety is the spice of life.";
int num = count(s1.begin(), s1.end(), ‘e‘); //4
num = count_if(s1.begin(), s1.end(), [](char c) {return (c <= ‘e‘ && c >= ‘a‘);});  //6

s1 = "Goodness is better than beauty.";
string::iterator itr = search_n(s1.begin(), s1.begin()+20, 2, ‘s‘); // itr -> first ‘s‘
s1.erase(itr, itr+5);   //ss is
s1.insert(itr, 3, ‘x‘); //Goodnexxxss
s1.replace(itr, itr+3, 3, ‘y‘); //Goodneyyyis  replace substring

is_permutation(s1.begin(), s1.end(), s2.begin());   //检查s1是否是s2的排列
replace(s1.begin(), s1.end(), ‘e‘, ‘‘); //replace characters
transform(s1.begin(), s1.end(), s2.begin(),
          [](char c) {
              if (c < ‘n‘)
                  return ‘a‘;
              else
                  return ‘z‘;
          });
s1 = "abcdefg";
rotate(s1.begin(), s1.begin()+3, s1.end());  //s1: defgabc

u16string s9;   //string char16_t
u32string s8;   //string char32_t
wstring s0;     //string wchar_t
to_wstring();

原文地址:https://www.cnblogs.com/logchen/p/10204000.html

时间: 2024-10-12 13:17:50

STL基础--String的相关文章

c++中级 STL基础学习(二)

deque 和vector差不多,可以在前端后端插入,一般用deque取代vector,vector只能在后端插入push_back().deque还可以push_front(). list:双向链表,不能使用下标,和数组vector deque不同.只能使用迭代器,来指示元素.push_front,push_back,insert(位置,值),位置一般用迭代器来指定位置,其中insert返回的是一个迭代器.例如lis.insert(a.begin, 12);返回的是一个迭代器.删除使用eras

【STL基础】deque

deque (double-ended queue) 构造函数: //default: deque<T> d; //空的vector //fill: deque<T> d(n); //n个元素的deque,元素默认初始化 deque<T> d(n, value); //n个元素值为value的deque //range: deque<T> d(first, last); //两个迭代器之间的元素构成的deque deque<T> d(arr, a

【STL基础】list

list 构造函数: //default: list<T> l; //空的list //fill: list<T> l(n); //n个元素, 元素默认初始化 list<T> l(n, value); //n个元素值为value //range: list<T> l(first, last); //两个迭代器之间的元素构成 list<T> l(arr, arr + sizeof(arr) / sizeof(T)); //由内置数组构造 //cop

黑马程序员_Java基础String类

- - - - - android培训.java培训.期待与您交流! - - - - - - - String是一个对象 String不属于8种基本数据类型(byte, char, short, int, float, long, double, boolean),String是对象,所以其默认值是null. String是一种特殊的对象,有其它对象没有的一些特性,通过JDK发现: public final class String implements java.io.Serializable

Java基础String的方法

Java基础String的方法 字符串类型写法格式如下: 格式一: String 变量名称; 变量名称=赋值(自定义或传入的变量值); 格式二: String 变量名称=赋值(自定义或传入的变量值);在输出时任何数据类型与字符串进行拼接,结果一般是字符串 1 public class StringFunc { 2 3 public static void main(String[] args){ 4 //字符串拼接 5 String str1; 6 str1 = "hello"; 7

C++ STL 基础及应用(6) 容器

读者可能有这样的经历,自己编写了动态数组类.链表类.集合类和映射类等程序,然后小心地维护着.其实 STL 提供了专家级的几乎我们所需要的各种容器,功能更好,效率更高,复用性更强,所以开发应用系统应该首选 STL 容器类,摒弃自己的容器类,尽管它可能花费了你很多的开发时间. 本章将介绍 STL 中的通用容器 包括 vector.deque.list.queue和stack.priority_queue.bitset.set和multiset.map和multimap等等. 概述 容器分类 (1)序

STL之string

一,字符串的概念 1.字符串与字符指针的比较 string是STL封装的一个类,char *是一个指向字符的指针,string是对char *的封装,是一个char *的容器. string不需要考虑内存的释放和越界,string会管理char *的内存,在构建,赋值,销毁等操作都是由string自己完成的. string提供了一些列的成员函数,简化了我们对字符串的操作. 二,字符的构造函数 1.默认无参构造函数 string str; // 构造一个空字符串 2.有参构造函数 //1. 用字面

C++STL之String

本文直接转载,非原创!仅记录供自己学习之用. 出处:http://blog.csdn.net/y990041769/article/details/8763366 在学习c++STL中的string,在这里做个笔记,以供自己以后翻阅和初学者参考. 1:string对象的定义和初始化以及读写 string s1;      默认构造函数,s1为空串 string s2(s1);   将s2初始化为s1的一个副本 string s3("valuee");   将s3初始化一个字符串面值副本

STL之string使用详解

声明一个C++字符串 string类的构造函数和析构函数如下: string s; //生成一个空字符串s string s(str) //拷贝构造函数 生成str的复制品 string s(str,ss) //将字符串str内以ss开始的部分当作字符串的初值 string s(str,ss,length) //将字符串str内ss开始长度为length的部分作为字符串的初值 string s(cstr) //将C字符串作为s的初值 string s(chars,chars_len) //将C字