0%

字符串

C-style字符串

结尾带’\0’,这对于很多处理字符串的函数很关键。#include 包含大量C语言字串的操作函数如strlen, strcpy, strcat…

strlen():只计算数组或者指针中的字符个数,不带结尾

cin.getline(name,20):读取整行的字串到name,最多20个
cin.get():类似,但下一次调用开头会带有换行(换行缓存到下次get),顺便检查了上一次输入的正确程度。

针对string类的getline(cin, string); 与cin混合使用时,在cin>>完成后,getline前需要通过getline(cin,”\n”)清除缓存,否则不进入getline输入。

1
2
3
// 清除缓存
string str="\n";
getline(cin,str);

string类

1
2
#include <string>
std::string

更方便,也更安全。像vector一样管理char.

struct和union

union只能同时存储一种类型,其他类型的会lost

new和delete

  • 不要delete释放不是new的内存
  • 不要delete同一块内存两次
  • new[]数组应当用delete []释放
  • 若用new[]为单一实体分配内存,应使用delete(不带方括号)释放
  • 对空指针delete是安全的

cin与cin.getline区别

cin.getline(addr,80) 与cin>>addr
getline:读整行直到‘回车’
cin:首先跳过‘空格’,读取字串,再次遇‘空格’停止;即跳过前面的空格,读取单个单词。

1
2
3
cin>>ch;
cin.get(ch);
ch=cin.get();

上面区别主要是cin>>ch直接跳过空格换行以及制表符

string格式化输出4位数字,前面补0,多用于文件名操作

1
2
3
int num_zero = 4;
string num = to_string(int_val);
string new_num = string(num_zero-num.length(),'0') + num;

注意int_val长度小于num_zero。