1.判断闰年
首先,如果能被4整除但是不能被100整除,就是闰年,或者,能被4,100和400同时整除的也是闰年。
也就是普通年份看能否被4整除,世纪年看能否被400整除
附上代码 :
bool Is_leap_year(int year) {
return (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0));
}
2.string类的常用函数
(1)size 和 length 函数 : 都是用来返回这个字符串的大小的函数(int)
(2)empty 函数 : 判断该字符串是否为空(bool)
(3)resize 函数 : 接受两个参数一个是int型的len,即重置后的字符串的长度,如果len < str.size() , 则只保留字符串的前len位。第二个参数是char型的c,当len > str.size(),如果给第二个参数,那么将用c填充不足的部分
(4)字符串的子串 :
string substr(int pos = 0,int n = npos) const;//返回从pos(位置)开始的n个字符组成的字符串
(5)字符串的交换 :
void swap(string &s2); //交换当前字符串与s2的值
(6)字符串的查找 :
int find(char c, int pos = 0) const;//从pos开始查找字符c在当前字符串的位置
若是找到返回该字符第一次出现的索引,若找不到则返回 string::npos
int find(const string &s, int pos = 0) const;//从pos开始查找字符串s在当前串中的位置
若是找到则返回第一个字符的索引,若找不到则返回 string::npos
(7)字符串的替换 :
string类的替换函数:
string &replace(int p0, int n0,const char *s);//删除从p0开始的n0个字符,然后在p0处插入串s
string &replace(int p0, int n0,const char *s, int n);//删除p0开始的n0个字符,然后在p0处插入字符串s的前n个字符
string &replace(int p0, int n0,const string &s);//删除从p0开始的n0个字符,然后在p0处插入串s
string &replace(int p0, int n0,const string &s, int pos, int n);//删除p0开始的n0个字符,然后在p0处插入串s中从pos开始的n个字符
string &replace(int p0, int n0,int n, char c);//删除p0开始的n0个字符,然后在p0处插入n个字符c
string &replace(iterator first0, iterator last0,const char *s);//把[first0,last0)之间的部分替换为字符串s
string &replace(iterator first0, iterator last0,const char *s, int n);//把[first0,last0)之间的部分替换为s的前n个字符
string &replace(iterator first0, iterator last0,const string &s);//把[first0,last0)之间的部分替换为串s
string &replace(iterator first0, iterator last0,int n, char c);//把[first0,last0)之间的部分替换为n个字符c
string &replace(iterator first0, iterator last0,const_iterator first, const_iterator last);//把[first0,last0)之间的部分替换成[first,last)之间的字符串
(8)字符串的删除 : erase函数
重载1 : iterator erase( iterator p);
p是指向某一字符的迭代器,返回值也是一个迭代器,指向被删除字符的下一个位置
重载2 : string& erase(size_t pos=0, size_t len = npos);
从指定位置 pos 开始删除 npos 个字符 , pos默认是0
重载3 : iterator erase (iterator first, iterator last);
删除指定范围内的字符串 ,是个左闭右开区间,类似于 begin() 和 end() 这两个函数 ,其实 end 函数的返回值是最后一个的下一个位置
(9)字符串的插入 : insert函数
重载1 : string &insert(int p0,const string &s);
在 p0 位置插入字符串 s ,例如说 :
string str = "123";
cout << str << endl;
str.insert(0, "zyl");
cout << str;
//运行结果 :
123
zyl123
重载2 : string &insert(int p0, int n, char c)
*在 p0 处插入 n 个字符串 c *
重载3 : string &insert(int p0,const string &s, int pos, int n)
在 p0 处插入字符串 s 从pos开始的连续n个字符
3.关于stringstream的相关操作
它是一个 string 转 int 的好工具
需要包含头文件 < sstream >
可以多个字符串流入,但是用完之后记得清理,否则会发生错误
简单的代码示例 :
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main() { //这是一个基本的操作
int num;
string str;
stringstream ss;
str = "123456";
ss << str;
ss >> num;
cout << num;
}
这个程序的运行结果就是 123456 ,这就成功地将string类型的数据转化为了int型
下面再来看一个例子 :
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main() {
int num;
string str1,str2,str3;
stringstream ss;
str1 = "12";
str2 = "34";
str3 = "56";
ss << str1 << str2;
ss << str3; //这里分开写是为了表明怎么流入ss都可以
ss >> num;
cout << num;
}
该程序的运行结果是 123456 跟上面相同
如果ss是还没使用的,那么可以多次流入数据,一旦将数据流出,那么该ss就不能再进行直接的更改,所以每一次流出之后,如果还想继续使用该流那么就应该对其清空,方法 : ss.clear()
4.控制输出格式
需要包含头文件< iomanip >
setw()函数 : 控制输出的场宽
1.只对紧接着输出的内容有效 , 如果后面没有输出内容则无效
2.默认是右对齐,想要左对齐的话必须在 setw() 之前 cout 之后加入left
cout<<left<<setw(10)<<"132456"<<endl;
3.如果输出的长度大于给出的场宽,那么该函数无效
setfill() 函数 : 将setw()多余的空格补上字符
对于时间格式的输入,需要补上前导0 :
//示例
cout<<setfill('0')<<setw(4)<<4<<endl;
//输出结果 : 0004
5.进制的转换
其余进制转十进制采用的方法是次幂相乘,附上代码 :
void To_ten(string str,int a) {//str就是要进行转换的数,a就是该数字对应的进制
for (int i = 0; i < str.length(); i++) {
if (str[i] >= 'a' && str[i] <= 'f')num[i] = str[i] - 'a' + 10;
if (str[i] >= 'A' && str[i] <= 'F')num[i] = str[i] - 'A' + 10;
if (str[i] >= '0' && str[i] <= '9')num[i] = str[i] - '0';
}//先把该字符串的每一个字符都化为数字
result = 0;
int j = 0;
for (int i = str.length() - 1; i >= 0; i--, j++) {
result += num[i] * pow(a, j);
}//再把它变成一个十进制的数字,用result来保存
}
//字符和数字之间可以通过ASCII码值进行直接的运算
将十进制的数字转化为别的进制的字符串 :
void To_want(long long result,int b) {//result就是待转化的十进制数字,b就是待转化的进制
string res;//res用来保存最后转化的结果
while (result) {
res.push_back(result % b + '0');
if (res.back() > '9') res.back() += 'A' - '9' - 1;//将大于9的字符转化为字母
result /= b;
}//一直取余b
reverse(res.begin(), res.end());//将字符串反转
cout << res;
}
6.getline 函数的用法
都可以接受空格输入哟
定义在头文件 #include< string >
函数的原型 : istream& getline ( istream &is , string &str , char delim );
istream 是一个输入流 ,比如说 cin , ifstream
str 表示把输入流中读入的字符串流入到str中保存起来
delim 表示遇到字符 delim的时候停止流入,默认是‘\n’
举个例子 :
string str; string str;
cin >> str; getline(cin,str);
cout << str; cout<<str;
//运行结果 : //运行结果 :
//输入 : 我爱你 那是不可能的 //输入 : 我爱你 那是不可能的
//输出 : 我爱你 //输出 : 我爱你 那是不可能的
是不是很神奇,空格符也算入到字符串str里了!
函数 : cin.getline(存放字符的变量名,接受字符个数,结束字符[默认为’\0’])
该函数的作用是将字符串中的每一个字符都取出来放在一个char型的数组里面
看如下代码:
char a[20];
cout << "请输入一个字符串:" << endl;
cin.getline(a, 10);
for (int i = 0; i < 10; i++)
cout << "第" << i + 1 << "个值为:" << a[i] << endl;
return 0;
/*
运行结果 :
请输入一个字符串:
12345678910123
第1个值为:1
第2个值为:2
第3个值为:3
第4个值为:4
第5个值为:5
第6个值为:6
第7个值为:7
第8个值为:8
第9个值为:9
第10个值为:
*/
1.为什么只有9个字符输出呢?因为,最后一个字符是结束字符,也就是默认的‘\0’,结束字符
2.变量的储存空间要足够大才行