文章参考:黑马程序员匠心之作|C++教程从0到1入门编程,学习编程不再难



一、string基本概念

本质: string是C++风格的字符串,而string本质上是一个类

string 和 char * 区别:

  • char * 是一个指针
  • string是一个类,类内部封装了char*,管理这个字符串,是一个char*型的容器

特点:

  • string 类内部封装了很多成员方法,例如:查找find,拷贝copy,删除delete 替换replace,插入insert
  • string 管理 char* 所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责

二、string的使用方法

2.1 string构造函数

string();          				,创建一个空的字符串 例如: string str;
string(const char* s);	        ,使用字符串s初始化
string(const string& str);      ,使用一个string对象初始化另一个string对象
string(int n, char c);          ,使用n个字符c初始化 

示例代码:

string s1; //创建空字符串,调用无参构造函数

const char* str = "hello world";
string s2(str); //把c_string转换成了string

string s3(s2); //调用拷贝构造函数

string s4(10, 'a'); // aaaa

2.2 string赋值操作

string& operator=(const char* s);             , char*类型字符串 赋值给当前的字符串
string& operator=(const string &s);           , 把字符串s赋给当前的字符串
string& operator=(char c);                    , 字符赋值给当前的字符串
string& assign(const char *s);                , 把字符串s赋给当前的字符串
string& assign(const char *s, int n);         , 把字符串s的前n个字符赋给当前的字符串
string& assign(const string &s);              , 把字符串s赋给当前字符串
string& assign(int n, char c);                , 用n个字符c赋给当前字符串

示例代码:

string str1  = "hello world";

string str2 = str1;

string str3;
str3 = 'a';

string str4;
str4.assign("hello c++");

string str5;
str5.assign("hello c++", 5); // hello

string str6;
str6.assign(str5); // hello

string str7;
str7.assign(5, 'x'); // xxxxx

2.3 string字符串拼接

string& operator+=(const char* str);                  , 重载+=操作符
string& operator+=(const char c);                     , 重载+=操作符
string& operator+=(const string& str);                , 重载+=操作符
string& append(const char *s);                        , 把字符串s连接到当前字符串结尾
string& append(const char *s, int n);                 , 把字符串s的前n个字符连接到当前字符串结尾
string& append(const string &s);                      ,operator+=(const string& str)
string& append(const string &s, int pos, int n);      , 字符串s中从pos开始的n个字符连接到字符串结尾

示例代码:

// +=
string str1 = "I ";
str1 += "love play game"; // I love play game
str1 += ':'; //I love play game:

string str2 = "LOL DNF";
str1 += str2; //I love play game:LOL DNF

// append用法
string str3 = "I ";
str3.append("love ");
str3.append("game abcde", 4); // 追加前4个字符
//I love play game

str3.append(":"); // I love play game:
str3.append(str2, 0, 3); // 从下标0位置开始 ,截取3个字符,拼接到字符串末尾
// I love game:LOL

注:下标从0开始


2.4 string查找和替换

int find(const string& str, int pos = 0) const;               , 查找str第一次出现位置,从pos开始查找
int find(const char* s, int pos = 0) const;                   , 查找s第一次出现位置,从pos开始查找
int find(const char* s, int pos, int n) const;                , 从pos位置查找s的前n个字符第一次位置
int find(const char c, int pos = 0) const;                    , 查找字符c第一次出现位置
int rfind(const string& str, int pos = npos) const;           , 查找str最后一次位置,从pos开始查找
int rfind(const char* s, int pos = npos) const;               , 查找s最后一次出现位置,从pos开始查找
int rfind(const char* s, int pos, int n) const;               , 从pos查找s的前n个字符最后一次位置
int rfind(const char c, int pos = 0) const;                   , 查找字符c最后一次出现位置
string& replace(int pos, int n, const string& str);           , 替换从pos开始n个字符为字符串str
string& replace(int pos, int n, const char* s);               , 替换从pos开始的n个字符为字符串s

示例代码:

//查找
string str1 = "abcdefgde";
int pos = str1.find("de"); //返回下标3,否则返回-1
pos = str1.rfind("de"); // 返回下标7

//替换
string str2 = "abcde";
str2.replace(1, 3, "123"); // 将下标从1开始的3个字符bcd替换成123
// a123e
  • find查找是从左往后,rfind从右往左
  • find找到字符串后返回查找的第一个字符位置,找不到返回-1
  • replace在替换时,要指定从哪个位置起,多少个字符,替换成什么样的字符串

2.5 string字符串比较

字符串比较是按字符的 ASCII 码进行对比, = 返回 0、> 返回 1 、 < 返回 -1

int compare(const string &s) const;   ,与字符串s比较
int compare(const char *s) const;     ,与字符串s比较

注:主要比较相等


2.6 string字符存取

char& operator[](int n);		,通过[]方式取字符
char& at(int n);				,通过at方法获取字符

示例代码:

string str = "hello world";
for (int i = 0; i < str.size(); i++) {
	cout << str[i] << endl;
}
for (int i = 0; i < str.size(); i++) {
	cout << str.at(i) << endl;
}
//字符修改
str[0] = 'x';
str.at(1) = 'y';
cout << str << endl; // xyllo world

2.7 string插入和删除

string& insert(int pos, const char* s);           , 插入字符串
string& insert(int pos, const string& str);       , 插入字符串
string& insert(int pos, int n, char c);           , 在指定位置插入n个字符c
string& erase(int pos, int n = npos);             , 删除从Pos开始的n个字符 

示例代码:

string str = "hello";
str.insert(1, "123"); // h123ello
//删除从下表1开始3个字符
str.erase(1, 3); //hello

2.8 string子串

string substr(int pos = 0, int n = npos) const;   ,返回由pos开始的n个字符组成的字符串

示例代码:

string str = "abcdefg";
string subStr = str.substr(1, 3); // bcd

string email = "hello@sina.com";
int pos = email.find("@"); // 5
// 从0开始的5个字符
string username = email.substr(0, pos); // hello
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐