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

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.变量的储存空间要足够大才行

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值