1 substr()是C++语言函数,主要功能是复制子字符串,要求从指定位置开始,并具有指定的长度
形式 : s.substr(pos, len)
返回值: string. pos是复制开始的位置,len则是复制字符串的长度。(pos的默认值是0,len的默认值是s.size() - pos,即不加参数会默认拷贝整个s)
异常 :若pos的值超过了string的大小,则substr函数会抛出一个out_of_range异常;若pos+n的值超过了string的大小,则substr会调整n的值,只拷贝到string的末尾
string s="sfsa";
string a=s.substr(0,3);
string b=s.substr();
string c=s.substr(2,3);
2 reverse()字符串反转函数(头文件:#include<algorithm>)
形式:1. reverse(key.begin(),key.end());
// 对于定义的string型的话呢翻转的是起点和终点这段区间 和sort用法类似;[st,ed)
2 . reverse(str+1,str+len);
// 对于定义的char[]型的话呢,就是填充的是翻转的位置,从哪里到哪里;类型和sort一样;
#include<iostream>
#include<string.h>
#include<stdio.h>
#include<algorithm>//字符串反转函数需要的头文件
using namespace std;
int main () {
char str[100];
string key;
cin>>key;
reverse(key.begin()+1,key.end()-2);
// 翻转的是起点和终点这段区间 和sort用法类似;[st,ed)
cout<<key<<endl;
scanf("%s",str);
int len=strlen(str);
reverse(str+1,str+len);
// 对于定义的char型的话呢,就是填充的是翻转的位置,从哪里到哪里;类型和sort一样;
cout<<str<<endl;
return 0;
}
3 memset()万能初始化函数
形式:memset(arr, key, sizeof(arr))
arr--是需要初始化的数组,key--是初始值,sizeof(arr)--是数组大小
功能:为任何类型数组的数据进行初始化。
特别注意:
memset()函数只用来初始化-1,0。不初始化其他数据,例如:memset(arr,INT_MAX,sizeof(arr))就会出现问题
char arr[2][5];
memset(arr,'-',sizeof(arr));//二维数组初始化完成
string err[1000];
memset(err,"yes",sizeof(err));//全部初始化为yes
int irr[5];
memset(irr,0,sizeof(irr));//全部初始化为0
4.strstr() 判断子串函数
用法: strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串。如果是,则该函数返回 str1字符串从 str2第一次出现的位置开始到 str1结尾的字符串;否则,返回NULL
注意:传入的str1,str2均为char*,而非string型。
char str1[100]="pressure";
char str2[100]="press";
if(strstr(str1,str2)!=NULL)
cout<<"yes";
5.getline()一行字符串的读入问题(包括空格)
用法:1 对于string类型的用法是:getline(cin,str);
2 对于char【】的用法是:cin.getline(arr,sizeof(arr));
3 对于char【】字符数组另一种读取:gets(arr);//直到换行结束
更多用法见如下代码:
#include<iostream>
#include<string>
using namespace std;
int main() {
string str1,str2;
char str3[100],str4[100],s,str5[100],str6[100];
cout<<"string读入一行str1:"<<endl;
getline(cin,str1);//对string来讲读入一行 ,直到换行,包括空格
cout<<"输入str5并读取:"<<endl;
cin.getline(str5,sizeof(str5),'a');//这里表示当读取到a时停止读取,没有a的话不会停止
cout<<"第一次读取:"<<str5<<endl;
cin.getline(str5,sizeof(str5));//第二次读取将会从上一次停止的那里继续读取,但不包括停止的符号
cout<<"第二次读取:"<<str5<<endl;
cout<<"输入str3:"<<endl;
gets(str3);//对字符数组来说,读入时,直到换行结束 ,包括空格
cout<<"输入str4:"<<endl;
cin.getline(str4,5); //接受固定个数的字符数组
cout<<"输入s:"<<endl;
getchar();//吸收空格
s=cin.get();//只接收一个字符赋给s
//cout<<"输入str6:"<<endl;
//cin.get(str6,6);//接受固定字符
cout<<"str1:"<<str1<<endl;
cout<<"str3:"<<str3<<endl;
cout<<"s:"<<s<<endl;
cout<<"str4:"<<str4<<endl;
// cout<<"str6:"<<str6<<endl;
return 0;
}
6 string的find()函数:可查找指定字符串和指定字符
使用方法:
如在str1中查找str2:str1.find(str2);
返回值为str2第一次在str1中出现的位置。
若希望在特定位置开始查找,可使用 str1.find(str2,pos);//pos就是指定开始查找的str1的位置
如果找不到,则返回值为string::npos ,通过a.find(val)==string::npos来做判断是否查找成功
string s="abcd aaa bbb";
string s1="abcda";
string s2="abcd";
if(s.find(s1)!=string::npos)cout<<"找到s1了"<<endl;
if(s.find(s2)==string::npos)cout<<"没有找到s2"<<endl;
7. string转换为字符数组char【】的函数:c_str()函数
附言:有些函数使用时需要传进去字符数组,例如strstr()函数,这时这个函数就显得有用途了
用法:需要使用strcpy()复制函数将转换后的字符串数组复制给另一个新的字符串数组,不可直 接等于。
string s4= "12345";
char s5[100];
strcpy(s5,s4.c_str());
cout<<s5;
//这里如果直接令s5=s4.c_str(),会报错
8. atoi()函数:把字符串转换成整型数
头文件: #include <stdlib.h>
注意:这里传进去的是字符数组,遇到string时需要使用c_str()将string型转换为char【】
char str[10] = "12345";
int n = atoi(str);
string s = "12345";
int n = atoi(s.c_str());
9.strcat():字符串拼接函数
格式:strcat(char[] str1,char[] str2)
是将str2拼接到str1后边
#include<iostream>
#include<string.h>
using namespace std;
int main()
{ char str1[100],str2[100];
cin>>str1;
cin>>str2;
cout<<str1<<endl;
cout<<str2<<endl;
cout<<strcat(str1,str2);//将str2接到str1后边
return 0;
}