两种风格:字符数组和string 一个是C风格一个是c++风格。
1、字符数组:格式char s1[100];
在我们创建字符数组的时候,数组末尾以'\0'结尾。
存储数据:char s1[100]="hello world";空格也是一个字符。
如果我们要在字符数组中某一位上存储一个字符,我们可以这样做s1[0]='a'注意是单括号。那这个字符数组就变成了"aello word"。
如果我们在某一位上写入一个结束符'\0'那这个字符数组就变成了"hello"
如果我们用cin写入字符数组,那写入后没有空格,格式是cin>>s1;还有一种方法出入字符数组,那就是格式化输入,格式是scanf("\d",s1),他在写入后也是没有空格。
同样我们在输出字符数组的时候我们也有两种方法一个是cout,一个是printf,如果我们要用cout时格式时:cout<<s1;如果我们要用printf的时候格式是:printf("%s",s1)
还有一种方法读取字符cin.getline(s1,99)//99是这个读取是的最大上限。
如果我们要求字符数组中一共有几个字符我们可以用这个格式:strlen(s1)
遍历字符数组
int n=strlen(s1);
for(int i=0;i<len;i++){
s[i];
}
如果我们要将字符数组中的一个字符修改成另外一个字符,代码是;
strcpy(s1,"abcd");
cout<<s1;//ancd
strcpy(s2,s1);//把s1复制给s2.
字符串拼接(单个字符)
strcat(s1,"abcd");
cout<<s1;//abcdabcd
字典序:
假如我们要判断”abcdef“与”abd“那第二个大,我们是按照一位一位从前往后比较。
判断字符数组
char s1[100],s2[100];
strcmp(s1,s2);
返回值:1、>0第一个大
2、=0一样大
3、<0第一个比较小
子串
空串是任何字符串的子串。
”abcde“->"", "a" "b"……"ab"……
子序列(不连续的子串)
前缀(从开头开始去子串连续)
后缀(在字符串中任意往后取得的子串)
strstr(s1,s2);//找子串
如果没有找到返回NULL
if(strstr(s1,s2)!=NULL){
cout<<strstr(s1,s2)-s1;//如果找到输出下标
//s1:"abcde"
//s2:"de"
}
2、string(字符串)(最大放4611686018……)19位
创建:string s1("abcdef");
替换:s1[0]='k';返回值:kbcdef
s1[3]='\0';返回值:kbcef没有截断
出入:cin>>s1;没有空格
getline(cin,s1)读入字符串有空格,没有上限
输出:cout<<s1;
赋值:s1="ababababab";
s2=s2;(s1必须是string但s2可以是数组也可以是字符串)
函数:to_string(123)把int强制转换成string
stio(123)把string强制转换成int
itoa(123)把int转成char
strcpy(s1,itoa(123));
atoi(s1)把char转成int
求长度:
string s1("abcde");
int len=s1,length();
比较字符串:
string s1("abcde");
string s2;
if(s1>s2)//比较字典序
s1=s1+"abc";//拼接
string st[100];
st[0];//string
st[i][j]//char st[i]里下标为j的字符
常用函数:
string si("abce");
s1,find("a")//找子串
返回值0,如果没有返回-1,下标
s1.find("a",2);
从第二个开始找
s1.rfind("a")
找最后一个出现的
s1.substr(pos,len);
从第一个变量开始,第二个变量的长度 提取子串
s1.erase(pos,len);
从第一个变量开始,擦除第二个变量的长度
s1.replace(pos,len,args);
从第一个变量开始,第二个变量是替换的长度,替换成什么