C++

编程小知识

Posted by Liao on 2019-07-24
1)字符变数字:str[i]-‘0’
1
2
3
int num = 123;
string s = to_string(num);
cout << s[0]-'0'<<endl;
2)char *strncpy(char *dest,const char *src,size_t n)

把str所指向的字符串复制最多n个字符到dest

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <string.h>

int main()
{
char src[40];
char dest[12];

memset(dest, '\0', sizeof(dest));
strcpy(src, "This is runoob.com");
strncpy(dest, src, 10);

printf("最终的目标字符串: %s\n", dest);

return(0);
}

//最终的目标字符串: This is ru

3) 用0x3f3f3f3f设定int的最大值

在许多算法中都要用到一个常量来表示最大值,例如:寻找一个最小数。

  • 不会数据溢出
  • 我们想将一个数组的数据全部置为无穷大的时候(经常用到),使用的 memset的第二个参数value是8-bit的,可使用memset来将数组所有值最大化。
1
const int INF = 0x3f3f3f3f;

参考

4) printf(“%08d\n”, num); 第一个0表示用0填充,第二个8是设置输出宽度(学号8个字符)
5) 表示最大/最小整数

头文件 #include <climits>

INT_MAX +2147483647 (2^31 - 1)

INt_MIN -2147483648 (-2^31)

int占4字节32位

long long 占8字节64位

6) pair<int, int> 是一种类型

pair<int, int>x

通过x.first x.second来引用其元素

7) 字符数组 字符指针

今天百度面试被问道这题

1
2
3
4
5
6
char *str = "abcff";  //字符指针
char str1[] = {'a','b','c'}; //字符数组
cout << strlen(str) <<endl; // 5
cout << strlen(str1) <<endl; // 9
cout << sizeof(str)/sizeof(char) << endl; //8 在64位系统中,8代表的是指针的大小,指针占8字节。
cout << sizeof(str1)/sizeof(char) << endl; // 3

char*类型,sizeof()计算出指针的大小,32位系统占4字节,64位系统占8字节,与char *的字符串长度无关系;而可以计算出字符数组char a[]中元素个数,而非指针大小。

但是如果将其用于参数传递的话,子函数中获取的将不再是字符串数组类型,而是指针,这个要特别注意。

strlen()可以计算字符指针字符串的真实值大小,判断方法是找’\0’,根据’\0’来计算长度。

https://blog.csdn.net/xc889078/article/details/8910812

8) c++向上向下取整
8.1 向上取整

1、公式: x = (n - 1) / m + 1,变形得 x = ( n + m - 1 )/ m

2、ceil(), ceil(x)返回一个大于x的最小正数

8.2 向下取整

1、整数除法运算符 / 代表向下取整, 常用于计算当中

2、(x-1)/y

2、floor(), floor(x)返回一个小于或等于x的最大整数

3、直接舍去小数部分,赋值给整数变量(适用于正数)
例如:int a = 2.5, b = int(2.5), a, b数值都是2