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 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 对象执行字符串的连接操作外,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()比较时逐字符比较的,一旦能比较出结果,就不再比较了。
string s1="abandon";
string s2="about";
int b=s1.compare(s2);//直接比较,s1小于s2,故返回-1
cout<
string s1("hello");
string s2("hi");
s1.swap(s2);
/*
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()插入函数
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(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";
*/
//用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
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的形参是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;
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"