不设标题了学的比较杂

输出字符菱形

题目描述

* 构造一个对角线长 $5$ 个字符,倾斜放置的菱形。

输入格式

没有输入要求。

输出格式

如样例所示。用 * 构成的菱形。

样例 #1

样例输入 #1

1

样例输出 #1

1
2
3
4
5
  *
***
*****
***
*
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int n=3;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n-i;j++)
{
cout<<" ";
}
for(int m=1;m<=2*i-1;m++)
{
cout<<"*";
}
cout<<endl;
}
for(int i=n-1;i>=1;i--)
{
for(int j=1;j<=n-i;j++)
{
cout<<" ";
}
for(int m=1;m<=2*i-1;m++)
{
cout<<"*";
}
cout<<endl;
}
}

字符串相关

char a[555]输入可以用gets()(可以读入空格)

也可以用cin不能读入空格但是

char字符长度strlen(a)

用string时可用a.length()或a.size()

s.empty() s为空串时返回true

swap() // 交换两个字符串的内容

string类型字符串用加法可以实现连接

1
#include<cctype>

加入这个头文件就可以调用以下函数:

1、isalpha(x) 判断x是否为字母

2、isdigit(x) 判断x是否为数字

3、islower(x) 判断x是否为小写字母

4、isupper(x) 判断x是否为大写字母

5、isalnum(x) 判断x是否为字母或数字

6、ispunct(x) 判断x是否为标点符号

7、isspace(x) 判断x是否为空格

对于以上函数,如果x符合条件的话,均会返回true,否则返回false

还有以下函数:

1、toupper(x) 如果x是小写字母,将其转换成大写字母

2、tolower(x) 如果x是大写字母,将其转换成小写字母


string


1
#include<string>

在本题目中用到的有以下几个函数,也是此头文件下比较常用的函数,更多的可以百度以下

1、s.erase(x,y) 表示将字符串s从x位置起删除y个字符

2、s.insert(x,y) 表示将字符串y(或字符y)插入到s的x位置处

3、s.push_back(x) 表示在s的末尾插入字符x

4、reverse(s.begin(),s.end()) 将字符串s翻转

5、s.append(a) 将a字符串加在s后面

6、s=s.substr(l,r) 提取出从s从l的r个字符

7、(int)s.find(a),输出a字符串在s字符串中第一次出现的位置

二分

这两个函数是STL中用于二分查找的两个函数,用法: 假定我们有一个有序的数组aa,并将数xx作为二分查找的目标,那么:

1
2
lower_bound(a,a+n,x)-a      //下标从0开始
lower_bound(a+1,a+n+1,x)-a //下标从1开始

它们就能取得最小的aa数组的下标ii,满足aix。

1
2
upper_bound(a,a+n,x)-a      //下标从0开始
upper_bound(a+1,a+n+1,x)-a //下标从1开始

它们就能取得最小的aa数组的下标ii,满足ai > x。

分治

if语句中如果连用两个if,且他们不互斥,若两个条件都满足,则会输出两个if控制的句子,因此条件不互斥还想输出一个时应用else if。

dfs

函数中return ;表示返回上一级函数

指针

指针基础

int a=3;

int *p=NULL;

p=&a;

p=(他存贮的空间位置) 指针变量的值都是一个代表内存地址的长的十六进制数

&p=(指针本身所占的空间位置)

*p=3(p存储的位置所指向的值)

&(*p)=&a先访问p指向的值3,然后通过3访问a的地址

*p=6;会改变p所指向的位置的值

导致a=6;

一级指针指向普通变量地址

二级指针指向比他一级的指针地址 *p1=&p;

&p1=(二级指针的地址)

p1=(所存储的一级指针的地址)

*p1=p=(p所存贮的普通变量的地址)

**p1 = *p =a=6 进行两次操作 套娃

修改**p1就可以修改 *p 以致于修改a的值了

以高级指针操作低级指针

switch case

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
int main(){
int a;
printf("Input integer number:");
scanf("%d",&a);
switch(a){
case 1: printf("Monday\n"); break;
case 2: printf("Tuesday\n"); break;
case 3: printf("Wednesday\n"); break;
case 4: printf("Thursday\n"); break;
case 5: printf("Friday\n"); break;
case 6: printf("Saturday\n"); break;
case 7: printf("Sunday\n"); break;
default:printf("error\n"); break;
}
return 0;
}

case 后面必须是一个整数,或者是结果为整数的表达式,但不能包含任何变量。

1
2
3
4
5
6
7
case 10: printf("..."); break;  //正确
case 8+9: printf("..."); break; //正确
case 'A': printf("..."); break; //正确,字符和整数可以相互转换
case 'A'+19: printf("..."); break; //正确,字符和整数可以相互转换
case 9.5: printf("..."); break; //错误,不能为小数
case a: printf("..."); break; //错误,不能包含变量
case a+10: printf("..."); break; //错误,不能包含变量

强制类型转换

1
2
3
int i = 10; 

double x = double(i);

new和delete运算符

序运行时,计算机的内存被分为4个区:程序代码区、全局数据区、堆和栈。其中,堆可由用户分配和释放。C语言中使用函数malloc()free()来进行动态内存管理。C++则提供了运算符newdelete来做同样的工作,而且后者比前者性能更优越,使用更灵活方便。

1
2
3
4
5
6
指针变量名 = new 类型
int *p;
p = new int;
delete 指针变量名
delete p;