字符串是计算机与人类沟通的重要手段
1.Ascii码
字符(指英文)在计算机当中是以AscII码存储的范围在-128~127
#include<iostream>
#include<cstring>
using namespace std;
int main(){
for(int i=0;i<128;i++){
printf("%d : %c\n",i,(char)i); //本质上char类型字符在计算机中存储的仍然是int类型
//所以char可以直接进行运算,
}
return 0;
}
需要记住的常用Ascii码:
- 0~9 对应 48~57
- A~Z 对应 65~90
- a~z 对应 97~122
2.字符数组
2.1 字符数组初始化
/*
字符数组初始化
*/
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
char a[]={'a','b','c'}; //普通的初始化
char b[]={'a','b','c','\0'}; // 添加一个表示字符串结尾的字符'\0'
char c[]="abc"; //长度为4
char d[5]="song"; //字符串长度为4,字符数组必须开 5个默认还会存'\0'
cout<<a<<" "<<endl;
cout<<b<<" "<<endl;
cout<<c<<" "<<endl;
cout<<d<<" "<<endl;
//字符数组的输入
char e[100];
scanf("%s",e); //方式一:向字符数组赋值的时候不加取地址符&,因为字符本身就是一个地址
cin>>s; //方式二:
fgets(e,10000,stdin) //方式三:因为前两种读入是遇到空格或回车会停止,第三种方式是直接读取一行(包含空格、回车)
// 参数一:为那个数组读入,参数二:最多读入的长度,参数三:后面讲
cin.getline(e,1000) //方式四: 读入一行,参数一:目标数组,参数二:最多读入的长度
//为指定的某位置赋值可以
scanf("%s",e+1);//从数组的第二个位置开始赋值
cin>>s+1 //数组的第二个位置开始赋值
String s;
getline(cin,s)//String类型,读入一行
//字符数组的输出
printf("%s\n",e);
puts(e)//默认存在换行符
return 0;
}
//字符串就是字符数组加上'\0'结束符
2.2 字符数组常用函数
/*
字符数组常用操作
*/
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main(){
char s[100],a[100],c[100];
scanf("%s",s);
scanf("%s",a);
//求字符串长度 strlen
cout<<strlen(s)<<endl;
//比较两个字符串 strcmp
cout<<strcmp(s,a)<<endl; //按照字典序比较,s>a 返回1,s=a返回0,s<a返回-1
//字符串的复制
strcpy(c,s); //将s字符串赋值给c字符串
cout<<c<<endl;
return 0;
}
3. String 字符串
/*
字符串String,需要引入库#include<string>
*/
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int main(){
//初始化string类型字符串
string s1; //定义一个默认的空字符串
string s2 = s1; //s2为s1的副本
string s3="hello"; //s3是字面值为hello的字符串
string s4(10,'c'); //s4是 cccccccccc
// 字符串的输入和输出
cin>>s1; //string类型不能用scanf读入,但是可以使用printf输出
cout<<s1<<endl;
printf("%s",s1.c_str());//调用c_str()函数,返回的是s1字符数组的首地址
puts(s1.c_str());//puts输出
//读入整行
getline(cin,s1);
//常用函数
//size(),返回字符串的长度
s1.size();
//empty(),判断字符串是否为空
s1.empty();
//字符串的比较,跟变量比较的方法类似 (按字典序)
if(s1 != s2);
//字符串拼接 (连接),同样也可以直接加字符(
//默认的=两边只有要string,就全部转化为string进行拼接,字面值串起来)
string s5=s3+"absc" ; //输出 helloabsc
string s6="abc"+"def";//报错 ,前提是两边都有string类型
//字符串遍历
//方式一: 当作字符数组遍历
string s="hello";
for(int i=0;i<s.size();i++) cout<<s[i]<<endl;
//方式二:增强for
for(char c : s) cout<<c<<endl; //等价: for(auto c : s) cout<<c<<endl; auto类型自动推导
// 两个函数back():返回字符串的最后一个字符
// pop_back():移除字符串的最后一个字符
}