一些初学者(我就是)可能用到的东西

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;
}

发布了3 篇原创文章 · 获赞 4 · 访问量 165

猜你喜欢

转载自blog.csdn.net/qq_45836635/article/details/104065895