C/C++基础内容

这一部分内容写的比较零散,主要是用于记录自己比较容易忘或是在写题中遇到过需要用的部分,并非完整全面的总结
会不断更新
多数函数功能详细描述来源:cplusplus.com

数据类型

typedef声明

常用于常用类型简写,如:

typedef long long ll;

数值类型

变量类型能存储的最大值和最小值

类型范围数量级
int-2147483648~2147483647-2x109 ~ 2x109
unsigned int0~42949672950 ~ 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仅保留第一次分割完成后的第一个字符串,剩余的字符串存储在一个静态变量中图1 strtok调用后的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不能再用

  1. cplusplus_strtok ↩︎

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值