写在前面: 这篇文章是我之前刷PAT(Basic Level)随手记下来的几个记忆点,希望对大家有所帮助。
如果要将数值类型如int、double、long
转换为字符串string
,可以使用to_string()
函数
#include
string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);
如果要将string
转换成int
输出,则使用stoi()
函数
#include
int stoi (const string& str, size_t* idx = 0, int base = 10);
int stoi (const wstring& str, size_t* idx = 0, int base = 10);
如果要将string
转换成long int
输出,则使用stol()
函数,用法类似
如果要将string
转换成long long
输出,则使用stoll()
函数,用法类似
如果要将string
转换成float
输出,则使用stof()
函数,用法类似
如果要将string
转换成double
输出,则使用stod()
函数,用法类似
如果要将string
转换成long double
输出,则使用stold()
函数,用法类似
如果要将char
转换成int
输出,则使用atoi()
函数,用法类似
如果要将string
转换成char
输出,则使用c_str()
函数,如
s1.c_str1()
strlen()
函数,返回在字符串中’\0’前面出现的字符个数,如:#include
#include
int main()
{
char str1[] = "abcdef";
printf("%d\n", strlen(str1));
return 0;
}
也可以用length()
和size()
函数
vector v
或者string v
进⾏ sort 排序:sort(v.begin(), v.end(), cmp1);
对数组a
进⾏sort排序:
sort(a, a + n, cmp1);
其中若要设置从大到小排序,则有:
bool cmp(int a,int b){return a>b;}
vector
来读取及处理数据,另设一组数组
来标记数据bool isprime(int a)
{
for (int i = 2; i * i <= a; i++)
if (a % i == 0) return false;
return true;
}
reverse()
函数#include
reverse(str.begin(),str.end()) //反转字符串
reverse(vector.begin(),vector.end()) //反转向量
reverse(a,a+strlen(a)) //反转数组
stack
将输入的每个单词或者字符s都分别v.push(s)压入栈中,再输出栈顶v.top(),然后将栈顶元素弹出v.pop(),直到栈空为止
#include
#include
using namespace std;
int main()
{
string s;
stack<string> v;
while(cin>>s) v.push(s);
cout<<v.top();
v.pop();
while(!v.empty())
{
cout<<" "<<v.top();
v.pop();
}
return 0;
}
b?x:y
先计算条件b,然后进行判断。如果b的值为true,计算x的值,运算结果为x的值;否则,计算y的值,运算结果为y的值。一个条件表达式绝不会既计算x,又计算y。
条件运算符是右结合的,也就是说,从右向左分组计算。例如,a ? b : c ? d : e
将按a ? b : (c ? d : e)
执行。加括号()是为了方便阅读,不加也是一样的。
vector
,同一类数据存储在同一个vector[i]中,读取时用vector[i][j]
printf("%02d",i)
,意思是用0补齐,一共2位,可以用其他数字代替。printf("%02d:%02d", m, pos);
#include
isdigit(char c or string c);
isalpha(char c or string c);
string s2 = s.substr(4); // 表示从下标4开始⼀直到结束
string s3 = s.substr(5, 3); // 表示从下标5开始,3个字符
cin>>name>>birth;
if(birth>="1814/09/06"&&birth<="2014/09/06")
{
cnt++;
if(birth>=maxbirth)
{
maxbirth=birth;
maxname=name;
}
if(birth<=minbirth)
{
minbirth=birth;
minname=name;
}
}
第一种,algorithm
头文件的find()。
使用方法:find(begin,end,value)
,一般用 容器.end()
来判断查找成功与否。左闭右开。
begin
是容器或者数组的起始地址(容器.begin()或者数组名),也可以是任意地址,不非法即可;
end
是结束查找的地址(容器.end()或者数组名+长度),
value
是想要查找的字符或者字符串,
查找成功将返回迭代器(容器)或者指针(数组),否则返回end()
#include
#include
#include
using namespace std;
int main()
{
vector<int> v;
for(int i=0;i<5;i++){
v.push_back(i);
}
if(find(v.begin(),v.end(),4)!=v.end()){
printf("找到的下标为%d\n",find(v.begin(),v.end(),4)-v.begin()); //获取元素的下标
}else{
printf("该元素不存在\n");
}
return 0;
}
第二种,string
自带的find(),可查找指定字符串和指定字符。
使用方法:如在string1中查找string2,string1.find(string2)
;返回值为string2第一次在string1中出现的位置。
若希望在特定位置开始查找,可使用 string1.find(string2,location)
;
如果找不到,则返回值为string::npos
,即对于string,通过a.find(val)==string::npos
来做判断是否查找成功
#include
#include
using namespace std;
int main()
{
string s1,s2;
s1 = "hello world";
s2 = "world";
if(s1.find(s2)!=string::npos){ //查找字符串
printf("s2在s1中的起始下标为%d\n",s1.find(s2));
}else{
printf("s1中不存在s2字符串");
}
char c = 'e';
if(s1.find(c)!=string::npos){ //查找字符
printf("字符c在s1中的起始下标为%d\n",s1.find(c));
}else{
printf("s1中不存在字符c");
}
return 0;
}
toupper()
,大写换小写用tolower()
,头文件为 < cctype >。 int t = N / 2 + N % 2;
string s = "0123456789";
string sub1 = s.substr(5); //只有一个数字5表示从下标为5开始一直到结尾:sub1 = "56789"
string sub2 = s.substr(5, 3); //从下标为5开始截取长度为3位:sub2 = "567"
将字符减去’A’再加1,此时返回的是该字母在1-26里的序号
s[i]=(s[i]-'A'+1);
将字符减去’0’即可
floor向下取整
ceil向上取整
round四舍五入
#include
#include
using namespace std;
int main()
{
cout<<floor(4.4)<<endl;//4
cout<<floor(4.5)<<endl;//4
cout<<ceil(4.4)<<endl;//5
cout<<ceil(4.5)<<endl;//5
cout<<round(4.4)<<endl;//4
cout<<round(4.5)<<endl;//5
double a;//当a是正数也可以
while(cin>>a)
cout<<(int)(a+0.5)<<endl;
return 0;
}