C++中string详解与用法

string详解

string不是基本数据类型,是C++中对char封装成的类,所以C语言中没有string。

String类是不可变的,对String类的任何改变,都是返回一个新的String类对象。

头文件:  #include

构造函数

string s1();   //s1为空
string s2("hello");
string s3(4,'w');    //s3="wwww";
string s4("12345",1,3);   //s4="234";

//不能直接string s('w');

string初始化

//拷贝赋值
string s1;
s1 = "Hello";  // s1 = "Hello"
s2 = 'K';  // s2 = "K”


//利用assign函数
string s1("12345"), s2;
s3.assign(s1);  // s3 = s1
s2.assign(s1, 1, 2);  // s2 = "23",即 s1 的子串(1, 2)
s2.assign(4, 'K');  // s2 = "KKKK"
s2.assign("abcde", 2, 3);  // s2 = "cde",即 "abcde" 的子串(2, 3)

//利用+
string s;
s+=a[i];

//利用substr函数
string s1,s2;
s1="hello";
s2=s1.substr(0,3);   //s2="hel";

string 函数用法

append()函数

除了可以使用++=运算符对 string 对象执行字符串的连接操作外,string 类还有 append 成员函数,可以用来向字符串后面添加内容。append 成员函数返回对象自身的引用。

string s1("123"), s2("abc");  //以下操作为平行操作
s1.append(s2);  // s1 = "123abc"
s1.append(s2, 1, 2);  // s1 = "123bc"
s1.append(3, 'K');  // s1 = "123KKK"
s1.append("ABCDE", 2, 3);  // s1 = "123CDE",添加 "ABCDE" 的子串(2, 3)

compare()函数

 用于比较字符串。compare 成员函数有以下返回值:

  • -1 表示当前的字符串小;
  •  0 表示两个字符串相等;
  • 1 表示另一个字符串小。

compare()比较时逐字符比较的,一旦能比较出结果,就不再比较了。

    string s1="abandon";
    string s2="about";
    int b=s1.compare(s2);//直接比较,s1小于s2,故返回-1
    cout<

swap()交换string对象的内容

string s1("hello");
string s2("hi");
s1.swap(s2);

find()函数 返回子串的下标位置

/*
string的find()函数用于找出字母在字符串中的位置。

find(str,position)

find()的两个参数:

str:是要找的元素

position:字符串中的某个位置,表示从从这个位置开始的字符串中找指定元素。

可以不填第二个参数,默认从字符串的开头进行查找。

返回值为目标字符的位置,当没有找到目标字符时返回npos。
*/

string s = "hello world!";
cout << s.find("e") << endl;   // 1

string s = "hello world!";
if (s.find("a") == s.npos) {
    cout << "404 not found" << endl;
}

string s = "hello world!";
cout << s.find("l",5) << endl;   //9

//找到目标字符在字符串中第一次出现和最后一次出现的位置 
string s = "hello world!";
cout << "first time occur in s:"<

C++string中的insert()函数用法详解

C++string中的insert()插入函数
basic_string& insert (size_type pos, const basic_string& str);
在原串下标为pos的字符前插入字符串str

basic_string& insert (size_type pos, const basic_string& str, size_type pos1, size_type n);
str从下标为pos1开始数的n个字符插在原串下标为pos的字符前

basic_string& insert (size_type pos, size_type n, char c);
在原串下标为pos的字符前插入n个字符c

#include
using namespace std;
int main()
{
    string str="hello";
    string s="Hahah";
    str.insert(1,s);//在原串下标为1的字符e前插入字符串s
    cout<

substr()用法

substr(pos,n)               

返回一个string,包含从pos开始的n个字符的拷贝

pos默认值是0,n的默认值是size()-pos,即不加参数会默认拷贝整个string

若pos的值超过string的大小,则substr函数会抛出一个out_of_range异常

若pos+n的值超过了string的大小,则substr会调整n的值,只拷贝到string的末尾

#include
#include
using namespace std;
int main()
{
  string s("12345asdf");
  string a = s.substr(0,5);     //获得字符串s中从第0位开始的长度为5的字符串
  cout << a << endl;
}

//a为 12345

一个经典用法

(s+s).substr(n,s.size());

/*  string s="abcdefg";
    将前n个字符移动到尾部
    例如 移动前2个字符
    ss="cdefgab";
*/

replace() 函数 对string对象中的子串进行替换,返回值为对象自身的引用

//用str替换指定字符串从起始位置pos开始长度为len的字符 
string& replace (size_t pos, size_t len, const string& str); 
string s="12345";
s=s.replace(2,3,"aa");   //s="12aa";



//用str替换 迭代器起始位置 和 结束位置 的字符 
string& replace (const_iterator i1, const_iterator i2, const string& str);

string s="12345";
s=s.replace(s.begin(),s.begin()+3,"aaa");  //s="aaa45";

string s1("Real Steel");
s1.replace(1, 3, "123456", 2, 4);  //用 "123456" 的子串(2,4) 替换 s1 的子串(1,3)
cout << s1 << endl;  //输出 R3456 Steel

string s2("Harry Potter");
s2.replace(2, 3, 5, '0');  //用 5 个 '0' 替换子串(2,3)
cout << s2 << endl;  //输出 HaOOOOO Potter

int n = s2.find("OOOOO");  //查找子串 "00000" 的位置,n=2
s2.replace(n, 5, "XXX");  //将子串(n,5)替换为"XXX"
cout << s2 < < endl;  //输出 HaXXX Potter

to_string()函数 把数值类型如int、double、long等转化为string

int a = 4;
double b = 3.14;
string str1, str2;
str1 = to_string(a);
str2 = to_string(b);
cout << str1 << endl;
cout << str2 << endl;

stoi() 和atoi() 函数将字符串转化为int型

区别是stoi的形参是const string*,而atoi的形参是const char*。c_str()的作用是将const string*转化为const char*

string s1("1234567");
char* s2 = "1234567";

int a = stoi(s1);
int b = atoi(s2);
int c = atoi(s1.c_str());
cout << a << endl;
cout << b << endl;
cout << c << endl;

reverse()函数 翻转字符串

string s="12345";
reverse(str.begin(),str.end());

reverse(str.begin(),str.begin()+3);

assign()函数 常用于赋值

/*
C++ string assign()赋值常用方法

函数assign()常用在给string类变量赋值.

常用方法有:
*/
string str1="hello";

//1,直接用另一个字符串赋值.

 str2.assign(str1);    //即用str1给str2赋值.  "hello"

//2,用另一个字符串的一个子串赋值
 
str3.assign(str1, 2, 3);         //"ll0"

//3,用一个字符串的前一段子串赋值;

str4.assign("World", 5);     //"Worl"

//4,用几个相同的字符,赋值.

str5.assign(10, 'c');          //"cccccccccc"

你可能感兴趣的:(C++基础学习笔记,c++,字符串)