备战蓝桥杯——string、map的使用

STL——string

标准库类型string表示可变长的字符序列,注意加头文件

蓝桥杯C++组基础知识之标准库类型string_αγ的博客-CSDN博客标准库类型string标准库类型string表示可变长的字符序列,使用前先加头文件#include<string>using std::string1、定义和初始化string对象string s1;//默认初始化,s1是一个空字符串string s2=s1;//s2是s1的副本//拷贝初始化string s2(s1);//s2是s1的副本//直接初始化string s3="hiya";//s3是该字符串字面值的副本//拷贝初始化string s3("hiyahttps://blog.csdn.net/qq_44778120/article/details/122227154?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522164897065116780366588492%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=164897065116780366588492&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-4-122227154.142%5Ev5%5Epc_search_result_control_group,157%5Ev4%5Econtrol&utm_term=%E8%93%9D%E6%A1%A5%E6%9D%AF%E4%B8%ADstring%E7%9A%84%E4%BD%BF%E7%94%A8&spm=1018.2226.3001.4187

1、定义和初始化string对象

▲string s1;			//默认初始化,s1是一个空字符串
▲string s2=s1;		//s2是s1的副本//拷贝初始化
string s2(s1);		//s2是s1的副本//直接初始化
▲string s3="hiya";	//s3是该字符串字面值的副本//拷贝初始化
string s3("hiya");	//s3是该字符串字面值的副本//直接初始化
▲string s4=(10,'c');	//s4的内容是cccccccccc//拷贝初始化
string s4(10,'c');	//s4的内容是cccccccccc//直接初始化

 2、string对象上的操作

s.substr(a,b) 截取字符

操作说明
os<<s /cout<<s将s写到输出流os中,返回s
is>>s / cin>>s从输入流 is中读取字符串赋给s,字符串以空白分隔,返回is
getline(is,s) / getline(cin,s)从is中读取一行赋给s,返回is
s.empty()s为空返回true,s不空返回false
s.size()返回s中字符个数
s[n]返回s中第n个字符的引用,位置从0计起(同数组)
s3=s1+s2返回s1和s2连接后的字符串(字符串连接)
s2=s1字符串拷贝
s1==s2判断两个字符串所含字符是否完全一样
s1!=s2string对象相等性对字母的大小写敏感
<,<=,>=,>利用字符在字典中的顺序进行比较,且对字母的大小写敏感

  • 在将标准输入的内容读取到s中时(cin>>s;),string对象会自动忽略开头的空白(空格符、换行符、制表符等)并从第一个真正的字符开始读起,直到遇到下一处空白为止。即会吞掉第一个空格
    //
    string s1;
    cin>>s1;		//输入"  hello world  "
    cout<<s1<<endl;	//输出"hello"
    //
    string s1,s2;
    cin>>s1>>s2;		//输入"  hello world  "
    cout<<s1<<s2<<endl;	//输出"helloworld"
    
  • getline读取一行,以换行符结束,但换行符是被读取进来了,在把所读内容存到string对象中时不存换行符
  • size函数返回string对象的长度,返回类型实际上时string::size_type类型(无符号类型的值)能够存放下任何string对象的大小。无符号数在与有符号数比较时,如s.size()<n(n是int型负值)这个判断结果是true。尽量避免有无符号混用。
  • string对象相加时要保证’+'号两侧至少有一个string对象
    string s1="hello",s2="world";
    string s3=s1+","+s2;		//正确
    string s4=s1+","+"world";	//错误
    

 C语言中的string函数

函数说明
strlen( c )返回c的长度,空字符不计算在内('\0')
strcmp(c1,c2)比较c1和c2是否相等,c1==c2返回0;c1>c2返回正值;c1<c2返回负值
strcat(c1,c2)将c2附加到c1之后,返回c1, 即连接字符串可以直接用string中的+
strcpy(c1,c2)将c2拷贝给c1,返回c1
//
char ca[]={'c','+','+'};
cout<<strlen(ca)<<endl;//错误 必须以空字符作为结束的数组才能使用strlen
//
const char ca1[]="a string example";
const char ca2[]="a different string";
if(ca1<ca2){}//未定义的:试图比较两个无关地址
if(strcmp(ca1,ca2) < 0)//和两个string对象的比较s1<s2效果一样

******************************
string s("hello world")
char *str =s;//错误:不能用string对象初始化char*
const char *str = s.c_str();//正确c_strf

一般,用char数组了就不用string,用string了就别用数组。

两种输入方式

string 类型的数据 在输入后其实也可以像 char 类型的数组一样是一个连续的空间 那么就是因为这个特性 才能用scanf进行输入。那么输入的方法是:对空间的第一个元素所在的地址进行输入。那么我们早就知道对char 数组 或是 char* 空间数组的赋值方法是
char c[10];
scanf("%s\n",c);
gets(c);

***************************************
string s;
s.resize(100);  //要预设长度,
scanf("%s\n",&s[0]);
printf("%s\n",s.c_str());	//输出有效字符
cout << s << endl;			//剩余字符用空格补齐

或不预设长度直接,,尽量用cin赋值,scanf太多坑点
cin>>s;
cout<<s;

如果要求输入一行一行的时候,即要吞掉换行符

几种输入方式比较

cin:空格和换行都会认为是结束

string s;
cin>>s;  //可以输入一个字符流 即字符串
char c[10];
cin>>c[0];  //只能输入一个字符,需借助循环

**************
scanf():回车和空格都认为结束

string s;  //scanf比较坑,尽量用cin>>s输入
char c[10];
scanf("%s",c);
printf("%s",c);  //表示打印字符数组c
printf("%s",&c[0]);  //表示从第1个字符输出到最后
printf("%s",&c[1]);  //表示从第2个字符输出到最后

***************
gets(字符数组):一直读到敲回车,不管中间是否有空格,不能读string类型
getline(cin,字符串):一直读到敲回车,不管中间是否有空格,读string类型

puts(str);//==printf("%s\n", &str);puts()在输出字符串时会将’\0’自动转换成’\n’进行输出,也就是说,puts方法输出完字符串后会自动换行。

****************

读入多行字符串时,要求回车也能继续读入:

(要注意 两个连续输入之间要加一个getchar()来吸收一个换行

单纯读入多行字符串
string str[3];   //定义二维string,此时是读三行
for(int i=0;i<3;i++)
    getline(cin,str[i]);

***************************
包含其他输入后读入多行字符串
字符串:
int main()
{
	string s;
	int n;
	cin>>n;  //会产生一个和换行
	getchar();  //或 cin.ignore()  ,两个连续输入之间要加一个getchar()来吸收一个换行
	for(int i=0;i<n;i++)
	{
		getline(cin,s);//如果要求输入的字符串中没有空格,可以直接cin>>s,
		cout<<s<<endl;
	}
	return 0;
}
字符数组:
int main()
{
	char ch[256];
	int n;
	cin>>n;  //这里的cin会产生一个换行
	getchar(); //因此用一个getchar()吸收掉换行。  getchar()读取输入流中的一个字符
	for(int i=0;i<n;i++)
	{
		gets(ch);
		cout<<s<<endl;
	}
	return 0;
}

STL——map

C++中的map_SmileLing~的博客-CSDN博客_mapc++文章目录1. 简介2. pair类型2.1 pair类型的定义和初始化2.2 pair对象的一些操作3. map基本操作3.1 头文件3.2 创建map对象3.3 map元素访问3.3.1 使用下标 [ ] 访问3.3.2 使用 at() 方法访问3.4 map中元素的插入3.4.1 使用下标[]插入3.4.2 使用insert()插入元素3.4 erase() 删除元素3.5 count(k) ...https://blog.csdn.net/forever__1234/article/details/89647975

map是STL的一个关联容器,它提供一对一的映射关系

map<type , type> m;

map<key, value> m;

  • 第一个可以称为关键字(key),每个关键字只能在map中出现一次;
  • 第二个可能称为该关键字的值(value);

 自动建立key - value的对应。key 和 value可以是任意你需要的类型,包括自定义类型。

创建map对象

map是键-值对的组合,即map的元素是pair,其有以下的一些定义的方法:

  • map<k, v> m; : 定义了一个名为m的空的map对象
  • map<k, v> m2(m); : 创建了m的副本m2
  • map<k, v> m3(b,e); : 创建了map对象m3,并且存储迭代器b和e范围内的所有元素的副本

 map的 value的类型是存储元素的键以及值的pair类型键为const。

map<int, char> m; 						// 定义了一个名为m的空的map
map<int, char> m2(m); 					// 创建了m的副本m2
map<int, char> m3(m.begin(), m.end()); 	// 创建了map对象m3,并且存储迭代器范围内的所有元素的副本

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值