STL使用(一):标准库string

  • 数据结构-串

对于数据结构串,可以有一个简单的定义

#define MAXSTRLEN 255

typedef unsigned char SString[MAXSTRLEN];

  • string类

(1) 定义 & 初始化 string 对象

string str1;    // (1)定义string对象

string str2(str1); // (2)str2 是 str1的副本

string str3 = str2; // (3) 等价于str(str)  副本

string str4("1234");  // (4)副本,末尾添加/0 空字符

string str5 = "12345";  // (5)副本 等价


int length = 5;    
string str6(length, 'a');  //(6)把str6初始化为由length个a组成的连续字符串

(2)string对象的基本操作

os << str1;   // 输出流

is >> str2; // 输入流

getline(is, str3);  // 从is中输入一行返回给str3,返回is

str4[1];   //返回第1个字符的引用,从0开始计数

str4 + str5; // 返回str4和str5拼接的结果

str6 = str5; //副本

str6 == str5; //大小写敏感

str6 != str5;

关于STL容器,string使用

(1) string 类重载了 > < = == <= >= != 等操作符

利用字符在字典序中的顺序进行比较,并且对大小写敏感

(2)返回字符的长度,length()/size()几乎相同

时间复杂度O(1)

(3)插入 insert()

insert的用法有两种,下面直接上代码

#include<iostream>
#include<vector>
#include<cstring>
#include<string>

using namespace std;

int main()
{
	string str1 = "123456";   //待插入节点
	string str3 = "123456";   //待插入节点

	string str2 = "123";  //

	str1.insert(6, str2);
	cout << str1 << endl;

	string::iterator it=str2.begin();

	str3.insert(str1.begin(), it, it + 1); // 可以是下标,也开始迭代器str1.begin()
	cout << str3 << endl;


	system("pause");

	return 0;
}

输出:

在这里插入图片描述

(4)删除 erase()

  • 删除单个元素;

    string::iterator it1 = str2.begin();
    str1.erase(1);
    str1.erase(it1);

  • 删除一个区间(两种方法)

  1. str3.erase(1, 2);

  2. string::iterator it2 = str2.begin();
    string::iterator it3 = str2.begin();
    str2.erase(it2, it3);

string内还有一个清空操作: str.clear() 时间复杂度为O(1)

(5)查找相关

  • substr(pos,len) // 返回从pos开始的长度为len的字符串 时间复杂度为O(len)

  • find 用法两种

  1. str.find(str1)
  2. str.find(str2,pos)

时间复杂度为O(n*m)

  • 代替replace()

to_string // 非常重要的函数

参数value : 一个数值的转换

返回值:一个字符串保持转换后的值

#include <iostream>
#include <string>
#include <cstring>

using namespace std;

int main()
{
	int n = 10021312;

	double d = 123.2343;

	string str1 = to_string(n);
	string str2 = to_string(d);

	cout << str1 << "   " << str2 << endl;

	system("pause");
	return 0;
}

在这里插入图片描述


使用实例代码:

#include<iostream>
#include<vector>
#include<cstring>
#include<string>

using namespace std;

int main()
{
	

	char str1[] = "hello C string!";
	char* str2 = str1;

	char str3 = 'a';
	char str4 = 97;    // 对应的ASCII码值 
	char str5 = 'abc';

	cout << str1 << endl;
	cout << str2 << endl;
	cout << str3 << endl;
	cout << str4 << endl;
	cout << str5 << endl;




	string str6 = "hello C++ string!";
	string str7 = "string!";

	cout << str6.find(str7) << endl;    //返回第一次出现的位置
	cout << str6.substr(1, 6) << endl;

	string str8 = "today is really bad!";
	cout << str8 << endl;
	str8.erase(str8.begin() + 4);
	cout << str8 << endl;

	string str9 = "oh,no yerongrong";
	for (size_t i = 0; i < str9.length(); i++)
	{
		cout << str9[i] << endl;
	}

	string str;
	cin >> str;
	cout << str;
	string::iterator begin = str.begin();
	string::iterator end = str.end();
	cout << end - begin << endl;

	//高级操作:字符串拼接

	string s1 = "NCU";
	string s2 = "is good school!";
	cout << s1 << endl << s2 << endl;

	string s3 = s1 + s2;
	s1 += s2;
	cout << s3 << endl << s1 << endl;

	string st = "123";
	if (st.length() != st.size()) {
		cout << "error !!!!!" << endl;
	}
	else {
		cout << "length==size" << endl;
	}

	//string 同样可以比较大小

	string st1 = "aaa", st2 = "aab", st3 = "aa";
	if (str1 < str) {
		cout << "aaa<aab" << endl;
	}
	else {
		cout << "aaa>aab" << endl;
	}
	//  .....

	system("pause");
	return 0;
}


需要注意:对于string上的操作区间一般都是左闭右开区间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值