STL——初学者的笔记

set

我是看着紫书学的 ,但是紫书太深了,我这个菜鸡看不懂啊,就百度了一些大佬的博客,这篇文章还是算是总结吧。。。哦哦,还参考了学长的《算法进阶》
这是紫书上题目的连接,我特意找了一个样例可以复制的


tolower

把字母转换成小写,非字母字符不做处理
度娘解释
可以尝试一下的代码

# include <bits/stdc++.h>
using namespace std;

int main()
{
	string a;
	
	getline(cin,a);
	cout<<a<<endl;
	for(int i=0;i<a.length();i++){
		a[i]=tolower(a[i]);
	}
	cout<<a;
	return 0;
}

isalpha

判断字符ch是否为英文字母,若为英文字母,返回非0(小写字母为2,大写字母为1)。若不是字母,返回0。
度娘解释
可以尝试一下的代码

# include <bits/stdc++.h>
using namespace std;

int main()
{
	string a;
	
	getline(cin,a);
	for(int i=0;i<a.length();i++){
		if(isalpha(a[i])) cout<<a[i];
		else cout<<"*";
	}

	
	return 0;
}

sprintf

字符串格式化命令,主要功能是把格式化的数据写入某个字符串中
原型:int sprintf(char *str, const char *format, …)
度娘解释
可以尝试一下的代码

# include <bits/stdc++.h>
using namespace std;

int main()
{
	char str[256]={ 0};
	char dataa[]="1024";
	int data=97;
	double datad=98;
	//1.  str变成百分比符号	
		sprintf(str,"%%",data);
		cout<<endl;
		cout<<str<<" 1@ "<<data<<endl;	
		
	//2.  将整数转化为对应的ASCII字元 
		sprintf(str,"%c",data);
		cout<<endl;
		cout<<str[0]<<" 2@ "<<data<<endl; 
		
	//3.  将data转换为字符串 
		sprintf(str,"%d",data);
		cout<<endl;
		cout<<str<<" 3@ "<<data<<endl;
		
我的手机 2019/3/17 22:50:31
		
	//4.  将datad转化为浮点数 
		sprintf(str,"%f",datad);
		cout<<endl;
		cout<<str<<" 4@ "<<datad<<endl;
		
	//5.  获取data的是十六进制	%x转换成小写的十六进制  %X转化成大写的十六进制 
		sprintf(str,"0x %X",data);
		cout<<endl;
		cout<<str<<" 5@ "<<data<<endl;
		
	//6.  获取data的八进制 
		sprintf(str,"0o %o",data);
		cout<<endl;
		cout<<str<<" 6@ "<<data
		
我的手机 2019/3/17 22:50:47
		
	//7.
		sprintf(str,"%s",dataa);
		cout<<endl;
		cout<<str<<" 7@ "<<dataa<<endl;
		
		
	const char *s1="Hello";
	const char *s2="World";
		sprintf(str,"%s %s",s1,s2);
		cout<<endl;
		cout<<"@"<<str<<endl;
	
	return 0;
}

运行的结果:
在这里插入图片描述

sscanf

读取格式化的字符串中的数据。将参数str的字符串根据参数format字符串来转换并格式化数据,转换后的结果存于对应的参数内。
原型: int sscanf(const char *str, const char *format, …)。
度娘解释
可以尝试一下的代码

# include <bits/stdc++.h>
using namespace std;

int main()
{
	char buf[512]={0 };
	
	//一般用法 
	sscanf("123456 ","%s",buf);
	cout<<endl;
	printf("%s* @1 \n",buf);
	
	//取指定长度的字符串
	sscanf("123456 ","%4s",buf);
	cout<<endl;
	printf("%s* @2 \n",buf);
	
	//取到指定字符为止的字符串
	sscanf("123456 abcdef","%[^ ]",buf);
	cout<<endl;
	printf("%s* @3 \n",buf); 
	
	//取仅包含只当字符集的字符串
	sscanf("123456abcdefABCDEF","%[1-9a-z]",buf);
	cout<<endl;
	printf("%s* @4 \n",buf);

	//取到指定字符集为止的字符串  类似于@3 ^别忘记 
	sscanf("123456abcdefABCDEF","%[^a-b]",buf);
	cout<<endl;
	printf("%s* @5 \n",buf); 
	 
//	//取到“”和“”之间的字符串 *别忘记 
//	sscanf("123456/abcdef\ABCDEF","%*[^/]/%[^\]",buf);
//	cout<<endl;
//	printf("%s* @6 \n",buf); 
//这种用法我还没有搞得很明白,持续更新ing
	
	//取到“”和“”之间的字符串 *别忘记 
	sscanf("123456/abcdef#ABCDEF","%*[^/]/%[^#]",buf);
	cout<<endl;
	printf("%s* @6 \n",buf); 
	
	//给定一个字符串“hello, world”,仅保留“world”
	sscanf("hello, world","%*s%s",buf);
	cout<<endl;
	printf("%s* @7 \n",buf); 
	
	return 0;
}

运行的结果:
在这里插入图片描述

insert

插入操作 会按照顺序排好
可以参考这个大佬的blog

# include <bits/stdc++.h>
using namespace std;

set<string> dict;
set<string>::iterator it;
int main()
{
	string s,buf;
	while(cin>>s){
		//cout<<" "<<"@"<<s<<endl;
		for(int i=0;i<s.length();i++){
			if(isalpha(s[i])) s[i]=tolower(s[i]);
			else s[i]=' ';
		}
		stringstream ss(s);
		while(ss>>buf) dict.insert(buf);
//		for(it=dict.begin();it!=dict.end();it++) cout<<(*it)<<endl;
//		cout<<endl;
	}
	for(set<string>::iterator it=dict.begin();it!=dict.end();++it) 
		cout<<*it<<endl;	
	return 0;
}

注释那一段的运行结果:可以说明插入的时候是按字典顺序插入的。。。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其实吧,它是连起来的,水品有限,写的不好,将就着看吧

最终的运行结果:
在这里插入图片描述


本人菜鸡一个,关于算法还在学习,所以blog中的内容大部分是总结各位大佬的,如果有侵权要求删除或者出处注明不全的,非常抱歉,欢迎站内私信啊。。。

猜你喜欢

转载自blog.csdn.net/qq_44378175/article/details/88628641
今日推荐