这一部分内容写的比较零散,主要是用于记录自己比较容易忘或是在写题中遇到过需要用的部分,并非完整全面的总结
会不断更新
多数函数功能详细描述来源:cplusplus.com
目录
数据类型
typedef声明
常用于常用类型简写,如:
typedef long long ll;
数值类型
变量类型能存储的最大值和最小值
类型 | 范围 | 数量级 |
---|---|---|
int | -2147483648~2147483647 | -2x109 ~ 2x109 |
unsigned int | 0~4294967295 | 0 ~ 4x109 |
long long | ——— | -9x1018 ~ 9x1018 |
枚举类型
写题的时候好像没怎么遇到过?
字符串
字符串输入
- 输入(只能用于字符串中无空格、TAB的情况
scanf("%s",str);
cin>>str;
- 读入单个字符
常用于在整行读入前吃掉上一行字符或数字输入后残留的空格
getchar();
- 整行输入(字符串中含有空格
gets(char *str); //<stdio.h>
getline(cin,line); //<string>这个比较常用
空行:line.size()==0
字符串分割
- strtok
<string.h> / cstring
char * strtok(char *str,const char *delimiters);
//str 待分割的字符串;delimiters 包含分割符的字符串(可以同时有多个分割符)
//返回值是被分解的第一个子字符串,如果没有可检索的字符串,则返回一个空指针
//例
char *pch;
pch=strtok(str," ,.");
while(pch!=NULL){
printf("%s\n",pch);
pch=strtok(NULL," ,.");
}
注1:
1.第一次调用时需要一个字符串str作为参数,str的第一个字符用作函数扫描的起始位置,之后的调用中函数需要一个空指针(NULL),并使用上一次扫描结束后的位置作为新的扫描的起始位置
2.该函数分割时会破坏被分割字符串,第一次分割之后,原字符串str仅保留第一次分割完成后的第一个字符串,剩余的字符串存储在一个静态变量中
- std::string::find+std::string::substr
<string>
std::string::find
在字符串中搜索某参数在指定序列中首次出现的位置,这个参数可以是字符也可以是字符串
size_t find(const char *s, size_t pos) const;
size_t find(const string& str , size_t pos) const;
pos被指定时,搜索仅包括pos和pos后面的位置上的字符
std::string::substr
产生子字符串
string substr(size_t pos=0 , size_t len=npos) const;
string str;
flag=str.find(" ");
string str1=str.substr(0,flag);
部分常用函数
string.h
memset
<string.h> / cstring
常用于结构体/数组的初始化or清空
memset(void*ptr,int value,size_t num);
//ptr-指向要填充的内存块;value-要设置的值;num-字节数,size_t是无符号整数类型
//value值以int形式传递,但函数使用此值的unsigned char转换填充内存块
//int数组只能初始化为 0 or -1
//数组应用实例
int a[20];
memset(a,0,sizeof(a));
char ch[20];
memset(ch,'-',sizeof(ch));
memcpy
<string.h> / cstring
void *memcpy(void *destination, const void *source, size_t num);
//从source复制num个字节到destination
memcpy(b,a,sizeof(int)*k); //从数组a复制k个元素到数组b
memcpy(b,a,sizeof(double)*k);
memcpy(b,a,sizeof(a));
//eg.
/* memcpy example */
#include <stdio.h>
#include <string.h>
struct {
char name[40];
int age;
} person, person_copy;
int main ()
{
char myname[] = "Pierre de Fermat";
/* using memcpy to copy string: */
memcpy ( person.name, myname, strlen(myname)+1 );
person.age = 46;
/* using memcpy to copy structure: */
memcpy ( &person_copy, &person, sizeof(person) );
printf ("person_copy: %s, %d \n", person_copy.name, person_copy.age );
return 0;
}
sprintf
<string.h> / cstring
strchr(buf,"%d%d%d",a,b,c);
//把整数打印到字符串中
strxxx
strchr(s,buf[i]); //在s中查找buf[i]第一次出现的位置
strcpy(a,b); //赋值
strcmp(a,b); //比较
strcat(a,b); //连接
字母/数字判断 大小写判断
<ctype.h> / cctype
int isalpha(int ch);//判断字符是否为字母,ch为要检查的字符,被强制转换为int
int isdigit(int c); //检查字符是否是十进制数
int isprint(int c); //检查是否是可打印字符
int toupper(int c); //将小写字母转换为大写,返回值可隐式转换为char
int tolower(int c); //将大写字母转换为小写
math.h
floor(x); //返回不超过x的最大正整数;
floor(x+0.5); //四舍五入
gcd(); //欧几里得算法计算最大公约数
其他
#include<bits/stdc++.h> //省时偷懒的法子
std::ios::sync_with_stdio(false); std::cin.tie(0);
//关闭stdio同步,能够提升cin,cout的速度,且scanf和print不能再用