C++ STL—String

本文详细介绍了C++标准库中的String类,包括构造函数、赋值、插入、删除、替换等基本操作,以及字符串的比较、查找、转换等功能。通过实例展示了如何使用String类进行高效字符串处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

string 类的 string::npos 可同时定义字符串的最大长度,通常设置为无符号 int 的最大值。string 类包含了 6 个构造函数。string 类支持 cin 方式和 getline() 方式两种输入方式。简单示例如下:

string stuff;
cin >> stuff;
getline(cin, stuff);

上述三行代码,第一行是声明 string 类的对象 stuff,第二行是从屏幕读入输入的字符串,第三行同样实现第二行代码的功能。

c++ String

函数名称

功能

示例

构造函数

产生或复制字符串

string strs //生成空字符串
string s(str) //生成字符串str的复制品
string s(str, stridx) //将字符串str中始于stridx的部分作为构造函数的初值
string s(str, strbegin, strlen) //将字符串str中始于strbegin、长度为strlen的部分作为字符串初值

string s(num, c) //生成一个字符串,包含num个c字符

string s(str.begin(),str.end()); //复制字符串 str 的所有元素

析构函数

销毁字符串

~string() //销毁所有内存,释放内存

=,assign

赋以新值

stuff.assign("csc"); // "csc"替换原字符串的全部内容
stuff.assign("csc",1,2); // "csc"从1开始的2个字符替换原字符串  "sc"
stuff.assign("csc",2); // "csc"的前2个字符替换原字符串  "cs"
stuff.assign(5,'c'); //将原字符串替换为5个字符

Swap

交换两个字符串的内容

swap (str, str2);

str.swap (str2);

+=,append( ),push_back()

添加字符

  • basic_string& append (const E * s); //在原始字符串后面追加字符串s

  • basic_string& append (const E * s, size_type n);//在原始字符串后面追加字符串 s 的前 n 个字符

  • basic_string& append (const basic_string& str, size_type pos,size_type n);//在原始字符串后面追加字符串 s 的子串 s [ pos,…,pos +n -1]

insert ()

插入字符

A = “ello”   B = “H"

B.insert(0,A); // “elloH"      B.insert(1,A);  // “Hello"

B.insert(1,A,3); // “Ho”

B.insert(1,A,1,2) // “Hll”

B.insert (1 , 5 , 'C’); // “ HCCCCC”

string::iterator it = B.begin() + 1;
string::iterator itF = A.begin();
string::iterator itG = A.end();
B.insert(it, itF, (--itG)); // "Hell"

erase()

删除字符

(1)erase( pos, n); 删除从pos开始的n个字符,例如erase( 0, 1),删除0位置的一个字符,即删除第一个字符

(2)erase( position); 删除position处的一个字符(position是个string类型的迭代器)

(3)erase(first,last);删除从first到last之间的字符,(first和last都是迭代器)

clear ()

移除全部字符

 

resize ()

改变字符数量

调整容器中有效数据区域的尺寸,如果尺寸变小,原来数据多余的截掉。若尺寸变大,不够的数据用该函数第二个参数填充,影响size。    str.resize(10,'b');

replace()

替换字符

string A("Hello”);   string B("word”);

B.replace(2,1,A);  //“woHellod"

B.replace(2,1,A,2);  //“wollod"

B.replace(2,1,A,2,2); //“wolld"

  • basic_string& replace (size_type p0, size_type n0, const basic_string& str, size_type pos, size_type n);  //使用串 str 的子串 str [pos, pos + n-1] 替换源串中的内容,从位置 p0 处开始替换,替换字符 n0 个

  • basic_string& replace (size_type p0, size_type n0, size_type n, E c); //使用 n 个字符 'c' 替换源串中位置 p0 处开始的 n0 个字符

  • basic_string& replace (iterator first0, iterator last0, const_iterator first, const_iterator last); //使用迭代器替换

+

串联字符串

 

==,! =,<,<=,>,>=,compare()

比较字符串内容

如果相比较的两个子串相同,compare() 函数返回 0,否则返回非零值。

 A = “aBcdef”     B = “AbcdEf"

intm=A.compare(B);//完整的A和B的比较

int p=A.compare(1,5,B,4,2);//"Bcdef"和"Ef"比较

size(),length()

返回字符数量

  • size() 和 length():这两个函数会返回 string 类型对象中的字符个数,且它们的执行效果相同。

  • max_size():max_size() 函数返回 string 类型对象最多包含的字符数。一旦程序使用长度超过 max_size() 的 string 操作,编译器会拋出 length_error 异常。

  • capacity():该函数返回在重新分配内存之前,string 类型对象所能包含的最大字符数。

max_size ()

返回字符的最大可能个数

 

empty ()

判断字符串是否为空

 

capacity ()

返回重新分配之前的字符容量

 

reserve()

保留内存以存储一定数量的字符

调用该函数可以为 string 类型对象重新分配内存。重新分配的大小由其参数决定。reserve() 的默认参数为 0。为容器预留足够的空间,避免不必要的重复分配,分配空间大于等于函数的参数,影响capacity。

[],at()

存取单一字符

  • 下标操作符 [] 在使用时不检查索引的有效性,如果下标超出字符的长度范围,会示导致未定义行为。对于常量字符串,使用下标操作符时,字符串的最后字符(即 '\0')是有效的。对应 string 类型对象(常量型)最后一个字符的下标是有效的,调用返回字符 '\0'。

  • 函数 at() 在使用时会检查下标是否有效。如果给定的下标超出字符的长度范围,系统会抛出 out_of_range 异常。

>>,getline()

从 stream 中读取某值

string stuff;

cin >> stuff;

getline(cin, stuff);

<<

将值写入 stream

getline(cin, s1);   // 第 1 个参数是输入流,第 2 个参数保存输入的字符串.

getline(cin, s2, ' ‘);  // “hello csc”  s2 = hello  第 3 个参数指定分界符。

copy()

将内容复制为一个 C - string

 

c_str()

将内容以 C - string 形式返回

生成一个const char*指针,指向一个临时数组。

 

data()

将内容以字符数组形式返回

substr()

返回子字符串

s.substr(pos, n)  //返回一个string,包含s中从pos开始的n个字符的拷贝, pos默认为0,n默认为s.size() - pos。

find()

搜寻某子字符串或字符

  • size_type find (const value_type* _Ptr , size_type _Off = 0) const;  //find()函数的第1个参数是被搜索的字符串,第2个参数是在源串中开始搜索的下标位置

  • size_type find (const value_type* _Ptr, size_type _Off = 0, size_type _Count) const;  //第1个参数是被搜索的字符串,第2个参数是源串中开始搜索的下标,第3个参数是关于第1个参数的字符个数,可能是 _Ptr 的所有字符数,也可能是 _Ptr 的子串宇符个数

begin( ),end()

提供正向迭代器支持

 

rbegin(),rend()

提供逆向迭代器支持

 

get_allocator()

返回配置器

 

最后一个有趣的东西

string B("abcd");
B = "ef";

cout << B.size() << endl; // 2
cout << B << endl; //ef
cout << B[2] << endl; // '/0'
cout << B[3] << endl; // d

 

string和数值类型转换

c++11提供了to_string方法,可以方便的将各种数值类型转换为 字符串类型:

std::string to_string(int value);

std::string to_string(long int value);

std::string to_string(long long int value);

std::string to_string(unsigned int value);

std::string to_string(unsigned long long int value);

std::string to_string(float value);

std::string to_string(double value);

 

std::wstring to_wstring(int value);

。。。。。。。。。。。。。。。

 还提供了sto...方法,将string转换为各种类型的数据:

std::string str = "1000";

int val = std::stoi(str);

long val = std::stol(str);

float val = std::stof(str);

 c++11还提供了字符串(char*)转换为整数和浮点类型的方法:

atoi: 将字符串转换为 int

atol: 将字符串转换为long

atoll:将字符串转换为 long long

atof: 将字符串转换为浮点数

 to_string 的一个小应用

//十进制转二进制 —— string实现
string dectobin1(const int& n){
	int a = n;
	string s;
	while(a){
		s = to_string(a%2) + s;
		a >>= 1;
	}
	return s;
}

后面还有栈(stack)实现的十进制转化为二进制STL——stack

string的小实用工具:模拟java中的split函数——字符串分割

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值