C/C++基础知识,包括输入输出方法、字符串长度求法、结构体数组排序等。
一、字符串
1.输入普通字符串
string s;
cin >> s;
或者
char s[100];
scanf("%s",s);
2.输入带空格的字符串
string s;
getline(cin,s);
或
cin.getline(字符数组名,字符个数,结束标志)
输入多个数据时常会搭配可以用 cin.ignore 吃掉缓冲区的空格(相当于c语言中getchar函数)。getchar();可以理解为吞掉换行。
3.求数组或字符串长度
3.1string类字符串
例:string s; 用s.size()或s.length()求。
3.2数组
例:char s[100] 用strlen(s)来求。
二、排序函数
sort();函数。
语法:sort(排序起始地址,排序结束地址,cmp排序方法);
排序方法默认为从低到高排序。所以若是要求从低到高排序,排序方法的参数可省略不写。若是有别的排序需求,可自己写一个cmp函数。
举例:int a[10] = {1,2,3,4,5,6,7,8,9,0};
从低到高排序:
int a[10] = {1,2,3,4,5,6,7,8,9,0};
//从低到高排序
sort(a,a+10);
结果为:0 1 2 3 4 5 6 7 8 9
从高到低排序:
int a[10] = {1,2,3,4,5,6,7,8,9,0};
//从高到低排序
sort(a,a+10,cmp);
其中
bool cmp(int a, int b)
{
return a>b; ///a>b时返回true 否则返回false
}
结果为:9 8 7 6 5 4 3 2 1 0
三、结构体
1.定义结构体数组
2.对结构体数组进行排序
例题:CSP202009-1 称检测点查询
#include<bits/stdc++.h>
using namespace std;
int n,X,Y;
int x[210],y[210];
struct away{
int range;
int num;
}D[210];
bool cmp(away x,away y)
{
if (x.range != y.range)
return x.range < y.range;
else return x.num < y.num;
}
int main()
{
scanf("%d%d%d",&n,&X,&Y);
for(int i=1;i<=n;i++)
{
scanf("%d%d",&x[i],&y[i]);
int m=X-x[i],n=Y-y[i];
D[i-1].range=pow(m,2)+pow(n,2);
D[i-1].num=i;
}
sort(D,D+n,cmp);
for(int i=0;i<3;i++)
printf("%d\n",D[i].num);
return 0;
}
四、C语言math.h库常用函数
1.求x的绝对值
x是双精度浮点数:fabs(x);
x是int型:abs(x);
2.求x的y次方x^y
pow(x,y);
3.求e的x次方
exp(x);
4.求x的平方根
sqrt(x);
5.四舍五入x
round(x);
6.求ln(x) 以e为底
log(x);
7.求log(x) 以10为底
log10(x);
8.求x/y的余数
fmod(x,y);
9.返回不大于x的最大整数
floor(x);
10.返回不小于x的最大整数
ceil(x);
五、转换
1.强制转换
double x;
int y = (int)x;
2.string类里的数值转换
3.数字和字符串之间的转化
3.1字符串转数字
语法:stoi(字符串,开始位置,结束位置)
x=stoi(a);//将数字字符串转化为数字
3.2数字转字符串
语法 to_string(数字);
double x = 3.1415926;
string str = to_string(x);
结果:3.141593
4.char数组转换为string类字符串
4.1字符串str转化为字符数组 str.c_str();
4.2字符数组转化为字符串