字符串:
字符串就是字符数组加上结束符'\0'
可以使用字符串初始化字符数组,但此时应注意,每个字符串结尾暗含'\0'
因此字符数组的长度应比字符串多1
char a1[ ]={'c','+','+'} 字符数组
char a2[ ]={'c','+','+','\0'} 字符串
char a3[ ]={"c++"} 字符串
数组本身就是指针 可以不用&
如s[100] scanf("%d",s) 若从下标2开始 为scanf("%d",s+2)
但读取变量需加 scanf("%d",&s[20])
由于某些题目中需要读入空格(以字符串s为例)
要使读入字符不被空格中断 :
读入char类型:
1.使用fgets (s // 数组名,10000 // 最多读入数, stdin // 固定格式)
但注意 fgets 会读入最后一下回车!!!
// 不建议使用gets,过时了
2.可以用cin.getline(s,10000)
读入string类型:
用getline(cin,s)
(acwing765:字符串加空格 , acwing 769:替换字符 )
输出可以用puts(s) ,puts会自动换到下一行
字符数组的一些常用操作,需要引入头文件<cstring>
strlen(str) 求字符串长度,不包含'\0'
strcmp(a,b) 比较两个字符串大小,比较方式为字典序
若a<b,返回负数; a==b,return 0 ;a>b,返回正数;
strcpy(a,b) 将字符串b复制给从a开始的字符数组
s.substr(i,len//长度) 返回从i开始,长度为len的一段,如果省略len会直接到结尾
遍历字符数组中的字符(acwing 772:只出现一次的字符)
for(int i=0,len=strlen(a);i<len;i++)
cout<<a[i]<<endl;
关于 string 的读写(acwing765:字符串加空格 , acwing 769:替换字符 )
cin>>s1; // 会截止在空格
getline(cin,s1); // 读取一整行,不被空格中断
string s2,s2;
cin>>s1; // 会截止在空格
getline(cin,s1); // 读取一整行,不被空格中断
s1.size( )即为字符串s1长度
重点:
string可以直接相互比较
两个string可以直接相加,即后者拼接在前者之后
(acwing 773:字符串插入 , acwing 775:倒排单词 )
string后也可以直接加字符串和字符
(例如string s2=s1+','+"word"可以,但是s2=','+"word"+s1就不行,因为字面值不能直接相加而且运算是从左到右的)
字面值和string对象相加的原理:
在做加法运算时,字面值和字符都会变成string对象,因此相加就是将这些字面值串联起来
处理string对象中的字符
可以直接将string当成字符数组处理
string s;
for(int i=0,len=s.size();i<len;i++)
cout<<s[i]<<endl;
当题目中的输入有若干行时,可以使用while(cin>>a)依次输出结果