STL之string

一,字符串的概念

1.字符串与字符指针的比较

  • string是STL封装的一个类,char *是一个指向字符的指针,string是对char *的封装,是一个char *的容器。
  • string不需要考虑内存的释放和越界,string会管理char *的内存,在构建,赋值,销毁等操作都是由string自己完成的。
  • string提供了一些列的成员函数,简化了我们对字符串的操作。

二,字符的构造函数

1.默认无参构造函数

string str; // 构造一个空字符串

2.有参构造函数

//1. 用字面量字符串初始化string
string str1("HelloString");
//2. 用n个字符‘A‘初始化string
string str2(10,‘A‘);

3.拷贝构造函数

// 构造一个和str一样的字符,如string str2 = str1或者string str2(str1);
string str(const string& str)

4.析构函数

  string的析构函数用来释放分配的内存。

三,操作符重载函数

1.赋值操作符(=)

// 定义空字符串str1
string str1;
// 定义字符串str2
string str2("HelloWorld");
// 将字符串str2赋值给str1
str1 = str2

2.左移操作符(<<)

// 定义字符串str
string str("HelloWorld");
// 输出字符串
cout << str <<endl;

3.右移操作符(>>)

// 定义空字符串
string str;
// 标准输入到字符串str
cin >> str;
// 输出字符串
cout << str << endl;

4.数组下标操作符([])

// 定义字符串str
string str("HelloWorld");
// 获取第5个字符
char c5 = str[5];
cout << c5 << endl;
// 将第5个字符改为‘A‘
str[5] = ‘A‘;
cout << str << endl;

5.加法运算符

// 定义空字符串str1
string str1;
// 定义字符串str2
string str2("Hello");
// 将字符串str2和"World"相加并赋值给str1
str1 = str2 + "World";
// 输出str1
cout << str1 << endl;

6.加法赋值运算符(+=)

// 定义空字符串str1
string str1("Hello");
// 定义字符串str2
string str2("World");
// 将字符串str1和str2相加
str1 += str2;
// 输出str1
cout << str1 << endl;

四,常用成员函数

1.存取字符

// 定义空字符串str
string str("HelloWorld");
// 获取第5个字符
char c5 = str.at(4);
cout << c5 << endl;
// 设置第5个字符为‘A‘
str.at(4) = ‘A‘;
cout << str << endl;

2.获取字符串的字符指针

// 定义字符串str
string str("HelloWorld");
// 获取字符串str的字符指针
const char * ptr = str.c_str();
// 输出
cout << ptr << endl;

3.获取字符串的长度

// 定义字符串str
string str("HelloWorld");
// 获取字符串的长度
int len = str.length();
// 输出字符串长度
cout << "len = " << len << endl;

4.判断字符串是否为空

// 定义字符串str
string str("HelloWorld");
// 判断字符串是否为空
bool isEmpty = str.empty();
// 输出
cout << "isEmpty = " << isEmpty << endl;

5.字符串的比较

// 定义字符串str1
string str1("HelloWorld");
// 定义字符串str2
string str2("HelloWorld");
// 比较两个字符串:相等(0),str1>str2(1),str1<str2(-1)
bool result = str1.compare(str2);
// 输出
cout << "result = " << result << endl;

6.字符串的子串

// 定义字符串str
string str("HelloWorld");
// 截取从2位置开始的字符,截取5个
str = str.substr(2, 5);
// 输出str
cout << "substr = " << str << endl;

7.字符串的查找

string str("HelloWorld");
/*
字符串的正向查找
    find(char ch,int pos):返回字符ch的实际位置,从pos位置开始往后查找,没有返回-1
    find(char * str,int pos):返回字符串str的首字符位置,从pos位置开始往后查找,没有返回-1
*/
int pos1 = str.find(‘W‘, 3);
cout << "字符‘W‘出现的位置:" << pos1 << endl;
int pos2 = str.find("World", 3);
cout << "字符串\"World\"出现的位置:" << pos2 << endl;
/*
字符串的反向查找
    rfind(char ch,int pos):返回字符ch的实际位置,从pos位置开始往前查找,没有返回-1
    rfind(char * str,int pos):返回字符串str的首字符位置,从pos位置开始往前查找,没有返回-1
*/
int pos3 = str.rfind(‘o‘, 5);
cout << "字符‘o‘出现的位置:" << pos3 << endl;
int pos4 = str.rfind("World", 3);
cout << "字符\"World\"出现的位置:" << pos4 << endl;

8.字符串的替换

// 定义字符串str
string str("HelloWorld");
// 替换:删除从第2个字符串开始后面的5个字符,然后再插入字符串"Test"
str.replace(2, 5, "Test");
// 输出
cout << str << endl;

9.字符串的删除

// 定义字符串str
string str("HelloWorld");
// 删除字符串的从第2个位置开始的5个字符
str = str.erase(2, 5);
// 输出
cout << str << endl;

10.字符串的插入

// 定义字符串str
string str("HelloWorld");
// 在第2个位置插入字符串"Test"
str.insert(2, "Test");
// 在5个位置插入10个字符‘A‘
str.insert(5, 10, ‘A‘);
// 输出
cout << str << endl;

11.字符串的赋值

// 定义字空字符串str1
string str1;
// 定义字符串str2
string str2("HelloWorld");
// 将字符串str2的从第5个位置后的5个字符赋值给str1
str1.assign(str2, 5, 5);
// 输出
cout << str1 << endl;

12.字符串的追加

// 定义字符串str1
string str1("HelloWorld");
string str2("GoodMoring");
// 给str1追加字符串"Good"
str1.append("Good");
// str1追加str2的从第4个开始的6个字符
str1.append(str2, 4, 6);
// str1追加10个字符‘A‘
str1.append(10, ‘A‘);
// 输出
cout << str1 << endl;

13.把string拷贝到char *指向的内存空间

// 定义字符串str
string str("HelloWorld");
// 定义字符数组
char buf[256] = { 0 };
// 将str的从2开始的字符拷贝5个到buf中
str.copy(buf, 5, 2);
// 输出buf
cout << "buf = " << buf << endl;
时间: 2024-08-06 03:20:23

STL之string的相关文章

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字

C++STL之string (转)

在学习c++STL中的string,在这里做个笔记,以供自己以后翻阅和初学者参考. 1:string对象的定义和初始化以及读写 string s1;      默认构造函数,s1为空串 string s2(s1);   将s2初始化为s1的一个副本 string s3("valuee");   将s3初始化一个字符串面值副本 string s4(n,'c');   将s4 初始化为字符'c'的n个副本 cin>>s5;  读取有效字符到遇到空格 getline(cin,s6

C++之STL之string

/*C 语言中字符数组一般会采用char str[]来存放,但是显得会比较麻烦,C++在stl中加入了string类型,对字符串常用的功能进行了封装,操作起来比较方便*/#include<cstdio>#include<string>using namespace std;int main(){ string str = "hello world"; for (int i = 0; i< str.length(); i++){ printf("%

STL的string如何使用UNICODE?

#include "stdafx.h" #include "TestCmd.h" #ifdef _DEBUG #define new DEBUG_NEW #endif CWinApp theApp; using namespace std; #ifdef _UNICODE #define tstring wstring #else #define tstring string #endif // 唯一的应用程序对象 static void WriteString(H

STL之string插入

1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 int main() 6 { 7 string s("hello"); 8 string s2("abcdef"); 9 10 string::iterator p = s.begin(); 11 cout << *p << endl; 12 s.insert(p, 'A'); //

解读STL的string类中各方法的使用场景

所在头文件:<string> 实现:typedf basic_string<char> string 所在命名空间:std 功能:标准string提供字节标准容器的接口,同事增加对字符串中单独的字符的操作.由于标准string是basic_string<char>的一种特化,只能针对char型,如果字符编码方式是多字节或者可变字符序列(eg:UTF-8)那么它仍然按字节去解读,而不是按照传入内容的编码方式. (1)成员函数number functions constru

65)STL中string的知识

1)代码展示: string是一个类,只不过封装了 char*  而且还封装了  很多的字符串操作函数 2)string类的初始化: string的构造函数 2  默认构造函数: string();       //构造一个空的字符串string s1. 2  拷贝构造函数: string(const string &str);         //构造一个与str一样的string.如string s1(s2). 2  带参数的构造函数   string(const char *s);   

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.lengt