【C++基础】算法题中那些常用的头文件

这里是我整理的一些算法题中常用的一些头文件以及它其中经常被用到的函数,持续更新!

cstdio/stdio.h

头文件cstdio/stdio.h是C/C++使用最频繁的文件,因为文件中包含很多常用的方法,如下所示:

<1> 格式化输入(scanf)/输出(printf)

scanfprintf,是最常用的两个函数,在算法题中,一般用以格式化和大规模输入输出,输出和输入效率高于cincout

<2> 文件操作

  1. fopen/fclose 打开和关闭文件
#include <stdio.h>
int main ()
{
  FILE * pFile;
  pFile = fopen ("myfile.txt","w");
  if (pFile!=NULL)
  {
    fputs ("fopen example",pFile);
    fclose (pFile);
  }
  return 0;
  1. remove 删除文件 rename 重命名
#include <stdio.h>
using namespace std;

int main()
{
	//重命名
	const char oldname[] = "1.txt";
	const char newname[] = "myfile.txt"; 
	rename(oldname,newname); 
	//删除文件 
	remove( "myfile.txt" ) 
  	return 0;
}

<3> getcharputchargetsputs

getchar(): 读一个字符
putchar('c'):从标准输入设备输入字符c
gets():从标准输入设备读字符串,其可以无限读取,不会判断上限,以换行符结束读取
puts("a string"):输入一个字符串,可以换行,所以可以用puts("")换行。

iostream

C++ 流式操作头文件,算法题用的最多的头文件之一

<1> cin / cout

C++中新增的输入和输出函数。
cin/coutprintf/scanf的使用场景对比:

cin和cout 常常使用在输入/输入规模不大的场景,而printf和scanf常常使用在输入和输入规模大的场景,因为printf 和scanf 的效率要高于cin和cout ,但cin 和cout 使用更为方便,小规模基本上没有效率的问题。

值得一提的是:

如果你的编译器支持C++11标准及更高标准,iostream头文件包含了cstdio,也就是说仅仅#include<iostream>就可以使用cstdio的内容

cstring

该函数的头文件之下包含有很多实用的字符串函数,下面只介绍它们之中最常被使用的一部分。

<1>拷贝相关函数

memcpy

void* memcpy(void* destination,const void* source, size_t num)
从source指向的地址拷贝num bytes到destination指向的地址。不检查source中的空字符,总是拷贝num bytes,可能产生溢出,当destination和source的大小小于num时。

int a[] = {1,2,3,4,5,6};
int b[10];
//把a拷贝给b 
memcpy(b,a, sizeof a);

strcpy

char * strcpy ( char * destination, const char * source )
将source指向的字符串拷贝到destination指向的地方。会检查空字符,遇空字符停止(字符串结束标志)。可能存在溢出。

char a[] = "a string";
char b[30];
strcpy(b,a);
puts(b)//输出 a string

strncpy

char * strncpy ( char * destination, const char * source, size_t num )
将source指向的字符串拷贝到destination指向的地方,最多拷贝num bytes,或者遇到空字符(字符串结束标志)停止。num可以防止溢出。

char a[] = "string";
char b[20]; 
strncpy(b,a,sizeof(char[4]));
puts(b);//输出:stri

<2> 连接相关函数

strcat

char * strcat ( char * destination, const char * source )
将source指向的字符串连接到destination指向的字符串的后面。当连接后的大小大于destination的大小时可能存在溢出。

char a[] = "astring";
char b[] = "bstring"; 
strcat(a,b);
puts(a);//astringbstring

strncat

char * strncat ( char * destination, const char * source, size_t num )

将source指向的字符串连接到destination指向的字符串的后面。最多连接num bytes。

char a[] = "astring";
char b[] = "bstring"; 
strncat(a,b,sizeof(char[4]));
puts(a);//astringbstr

<3>比较相关函数

memcmp

int memcmp ( const void * ptr1, const void * ptr2, size_t num )

比较ptr1、ptr2指向的内存块的前面num bytes,如果都相同则返回0,如果第一个不同byte ptr1的小于ptr2的,返回负数,否则返回正数。如果前面都相同,即使中间遇到空字符,也会继续比较下去,直到比较完所有的num bytes。

char a[] = "this is a string";
char b[] = "this is b string";
int arr1[] = {1,2,3,4,5};
int arr2[] = {1,2,4,3,5};
int arr3[] = {1,2,2,4,5};
//比较串a和串b 前9位和前7位 
int isEqual = memcmp(a,b,sizeof(char[7])); // isEqual = 0
isEqual = memcmp(a,b,sizeof(char[9])); 	// isEqual = -1
//比较arr1和arr2前2位
isEqual = memcmp(arr1,arr2,sizeof(int[2])); //isEqual = 0

//整体比较 
isEqual = memcmp(arr1,arr2,
sizeof arr1 >= sizeof arr2 ? sizeof arr1 : sizeof arr2); // isEqual = -1

//整体比较arr1和arr3
isEqual = memcmp(arr1,arr3,
sizeof arr1 >= sizeof arr3 ? sizeof arr1 : sizeof arr3); // isEqual = 1

strcmp

int strcmp ( const char * str1, const char * str2 );

比较str1、str2指向的字符串,直到遇到不相同的字符或者空字符结束。如果都相同则返回0,如果第一个不同byte ptr1的小于ptr2的,返回负数,否则返回正数
char a[] = “this is a string”;

char b[] = "this is b string";
char c[] = "this is 1 string";
char d[] = "this is a string";
//比较字符串a b
int isEqual = strcmp(a,b); 
cout << isEqual << endl; // -1
//比较字符串a c
isEqual = strcmp(a,c);
cout << isEqual << endl; // 1
//比较字符串a d 
isEqual = strcmp(a,d);
cout << isEqual << endl;// 0

strncmp

int strncmp ( const char * str1, const char * str2, size_t num )

比较ptr1、ptr2指向的字符串,直到遇到不相同的字符或者空字符结束或者比较完前面的num bytes结束。如果都相同则返回0,如果第一个不同byte ptr1的小于ptr2的,返回负数,否则返回正数

//效果和memcmp差不多,只是这个只能比较字符串

<4>检索相关函数:

memchr

const void * memchr ( const void * ptr, int value, size_t num );
void * memchr ( void * ptr, int value, size_t num );

在ptr指向的内存中的前num bytes中搜索值value,返回第一个value的指针,如果没有找到返回空指针。

char a[] = "this is a string";
	void* aptr = memchr(a,'a',sizeof a); // aptr = 0x6afed3
	aptr = memchr(a,'c',sizeof a); //aptr = 0;

strchr

const char * strchr ( const char * str, int character );
char * strchr ( char * str, int character );

在ptr指向的字符串中搜索值value,返回第一个value的指针,如果没有找到返回空指针。

char a[] = "this is a string";
void* aptr = strchr(a,'a'); // aptr = 0x6afed3
aptr = strchr(a,'c'); //aptr = 0;

<5> 其他函数

memset

void * memset ( void * ptr, int value, size_t num );
设置ptr指向的内存的前面num bytes的值为value

strlen

size_t strlen ( const char * str );
返回str指向字符串的长度,不包含空字符

cmath

<1>. 绝对值

整数绝对值 abs

int abs( int num );
函数返回参数num.的绝对值

长整形绝对值 labs

long labs( long num );
函数返回参数num的绝对值。

浮点数绝对值 fabs

double fabs( double arg );
函数返回参数arg的绝对值。

<2> 三角函数

直接调用对应的方法即可: 注意x 为弧度值 ,π 用 M_PI 宏表示

三角函数

double sin (double x);

double cos (double x);

double tan (double x);

反三角函数

double asin (double x); 结果介于[-PI/2,PI/2]

double acos (double x);结果介于[0,PI]

double atan (double x);反正切(主值), 结果介于[-PI/2,PI/2]

double atan2 (double, double);反正切(整圆值),结果介于[-PI/2, PI/2]

<3> 指数函数

平方根 sqrt

double sqrt( double num );
函数返回参数num的平方根。如果num为负,产生域错误。

e的幂 exp

double exp( double arg );
函数返回 e (2.7182818) 的arg次幂。

3. 幂 pow

double pow( double base, double exp );
函数返回以参数base 为底的exp 次幂。如果base为零或负和exp 小于等于零或非整数时,产生域错误。如果溢出,产生范围错误

<4>对数函数

double log (double); 自然对数
double log10( double num );以10为底的对数
//若要算以 a 为底的对数:sum=log(x)/log(a); (换底公式)

<5>其他常用函数

double modf( double num, double *i );
函数将参数num 分割为整数和小数,返回小数部分并将整数部分赋给i。
float floor( float arg );
double floor( double arg );
long double floor( long double arg );
double floor( Integral arg ); (C++11)
功能:返回一个小于传入参数的最大整数(向下取整)

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流水线程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值