零碎芝士点

文章目录

C

1.C语言函数题需要输入/输出字符串,由于C语言无字符串类型,故使用字符型数组
printf 输出

char c[ ] = "I am happy"; 
printf("%s", c);   
//必须得是字符数组名,按字符数组名c找到其数组起始地址,然后逐个输出其中的字符,直到遇到'\0'为止。

scanf 输入

//scanf 逐个字符输入
char c[10];
for(int i = 0; i < 10; i++){
	scanf("%c", &c[i]);
} 

//scanf 输入一个字符串
char c[10];
scanf("%s",c);  //注意,不需要&,系统自动在字符串后面加一个'\0'结束符。

数组名称本身就代表了这个数组第一个元素的地址,所以不需要再加取地址运算符

gets 输入

gets(字符数组);

从终端输入一个字符串到字符数组,并且得到一个函数值。该函数值是字符数组的起始地址。它读入全部字符(包括空格)直到遇到回车为止。gets()函数并不读取换行符’\n’,它会把换行符替换成空字符’\0’,作为c语言字符串结束的标志。

缺陷:不检查数组是否能够装得下输入行

puts输出

puts(字符数组);

将一个字符串(以’\0’结束的字符数组)输出到终端。在输出时将字符串结束标志’\0’转换成’\n’,即输出完字符串后换行。

strcpy()

strcpy(dest, src);  //dest指向用于存储复制内容的目标数组。src要复制的字符串

2.scanf()返回值的利用

参考链接

while(scanf("%d %d",&a,&a)==2){}

如果a和b都被成功读入,那么scanf的返回值就是2
如果只有a被成功读入,返回值为1
如果a和b都未被成功读入,返回值为0
如果遇到错误或遇到end of file,返回值为EOF(定义为-1)
此外写成2 == scanf()格式是一种编程风格~防止由于程序员手误写成"="

while (~scanf("%d%d",&m,&n)){}  
//等价于
while (scanf("%d%d",&m,&n)!=EOF)

ACM中比较常见,其功能是循环从输入流读取m和n,直到遇到EOF为止

~是按位取反,-1【EOF】十六进制补码表示为0x ffffffff,f是二进制的1111,取反后就全部变成0了,于是while结束。只有返回值为EOF(即-1)时,其取反的的值(即while循环的判断条件)才为0,才能结束循环,其它输入情况下(无论是否输入成功)while循环的判断条件为非0,即为真。

漏洞:一但输入的值为字母、符号之类的,scanf赋值不成功把读到的内容又返回到stdin的缓冲区(假设这个值为t),其取反得到的值使while又进入到下一次循环,scanf又从stdin缓冲区里读到了原先吐回的t,如此成了死循环


3.atof()函数

atof()把参数 str 所指向的字符串转换为一个浮点数(类型为 double 型)

double atof(const char *str) 

4.fabs(num)<1e-6
浮点数因为存储形式的原因不能直接和0值比较,当要判断一个浮点数是否等于0时需要这样写


5.strstr()函数
strstr() 返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 null

char *strstr(const char *haystack, const char *needle)

CPP

1.stringstream字符串流

stringstream是字符串流,它将流与存储在内存中的string对象绑定起来。
运算符<<将数据传递给 stringstream 对象(与通过<<使用cout 对象的方法相同)
按照空格提取字符串,运算符>>将数据从 stringstream 对象传递给字符串(与通过>>使用cin 相同)


2.c_str()函数

c_str()函数生成一个const char*指针,指向以空字符终止的数组, 内容与本string串相同

const char *c_str();

3.输出设置 ---- 小数点位数保留&前导0

参考链接

小数点的保留

double PI = 3.1415926;
cout << setprecision(n) << PI;  //3.14三位有效数
cout << setiosflags(ios::fixed)<< setprecision(n) << PI;  //3.141小数点后三位

在用浮点表示的输出中,setprecision(n)表示有效位数,C++默认的流输出数值有效位是6。
在用定点表示的输出中,setprecision(n)表示小数位数,setiosflags(ios::fixed)是用定点方式表示实数。

输出前导0/其他字符

setw(n):预设宽度

cout<<setw(6)<<12345<<endl;

setfill(char c):若在预设宽度中还存在没用完的宽度大小,则用设置字符c填充

cout<<setfill('#')<<setw(6)<<12345<<endl;

改变进制输出

setbase(n):将输出数据转换为n进制

cout<<setbase(2)<<255<<endl;

4.vector之resize()函数

参考链接

vector<int> v;
v.resize(N);
for(int i=0;i<N;i++) cin >> v[i];
//给vector分配内存后可以按一定数量将数据读入数组中

5.vector之构造函数

vector<int> second (4,100);                      
 // 定义four ints with value 100
//相当于int a [4]; memset(a, 100, sizeof(a));

6.结构体自定义构造函数

struct node{
	int v,w;
};
vector<node> adj[N];
//以上写法想把node型变量加入adj数组中时,需要定义一个node型临时变量tmp
//node tmp;
//tmp.v = 3;
//tmp.w = 4;
//adg[1].push_back(tmp);

//更快的做法是定义结构体node的构造参数
struct node{
	int v,w;
	node(int _v,int _w):v(_v),w(_w){}  //构造函数
};
//这样就能不定义临时变量来实现加边操作
adj[1].push_back(node(3,4));
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值