- 注意输入和输出的格式
- 考虑对输入的考察
- 输出格式在最后做
input/process/output
STL
string.append(index,char);
string的相加操作,需要都是string ,不能是char
io
流操作基本都是以空格为分隔符 getline这样的全局函数是自定义分隔符
input
- fgets(string,sizeof(len),stdin) # 只接受len长度的输入,多余部分截断
- char s[6];cin.width(6);cin » s;
c-io
- scanf, printf, putc, getc, puts, gets
- fgetc, fputc, fgets, fputs, fprintf, fscanf
- 二进制:fread, fwrite
c++的两类字符串
- 以null即’\0’结尾的, char str[6] = {‘’,’’,’’},有strcat/strlen/strcopy等函数
- string类
string头文件
- 文件cstring,和string.h对应,c++版本的头文件,包含比如strcpy之类的字符串处理函数
- 文件string.h,和cstring对应,c版本的头文件,包含比如strcpy之类的字符串处理函数
- 文件string,包含std::string的定义,属于STL范畴
流
- iostream
- stringstream, 头文件是sstream
- 多用于数据类型格式转换,不用stdio.h了,把int/float/bool转换为string/char[]
- 优点:不用严格指定类型.%d之类的.类型安全&可扩展性
- 使用:ss «, ss ». 若要复用ss, 需要ss.clear();
- fstream
-
fileObject.open(filname, [ios::app, ios::out ios::trunc, ios::in, ]) # trunc防止文件已存在.可以在定义时直接初始化为(filename,[ios::]),或者使用open() -
指针重定位:seekg(seek get)读指针, seekg(n, [ios::cur, ios::beg, ios::end]) seekp(seek put)写指针 - 可以使用相对路径,../file.txt, 要有两个点.绝对路径一定可以
-
- 相当于对cout/cin名字的替换.cin默认忽略前置空格,将空格作为分隔符
- getline(cin, s, dlim) 默认用’\n’分割, 和get()的区别,getline会读取并丢弃换行符,get会保存换行符在输入序列中,而不是读取并保存,所以连续两次调用get, 第二个会直接返回, get针对char[], 可以设置字符数,属于string头文件 -或者cin.getline(str/char[], size(包含’\0’),结束符);
- ifstream fin(‘thisfile.txt’); getline(fin, s); stringstream ss(s); ss » s1; ss»s2;其中s1是以空格作为分隔符的
区分点
- 分隔符是什么.是否包含空格,是否可自定义dlim
- 针对的是string还是char[], 是否可以自定义长度
指针
对是否是野指针进行判断
unsign, sign
从二进制角度考虑,隐型类型转换
相等判断
- java中,对象本身是指针,==直接判断地址相等;值为equals()
内存
代码区 ==> 数据区 ==> 栈 ==> 堆
string与char
string.push_back(string); string.append(chars);
#include <string> using namespace std; ... char c = 'A'; char* lvlpcStr = "hello"; string lvStr,lvSubStr = "sub string"; lvStr.push_back(c); lvStr.append(lvlpcStr); lvStr.append(lvSubStr); char lvBuf[100]; _itoa_s(1234, lvBuf,10); lvStr.append(lvBuf); cout << lvStr << endl;
STL
https://www.cnblogs.com/skyfsm/p/6934246.html string vector set: 有序且唯一 list: 链表, 有自己的sort函数, 无法使用algorithm的排序算法,因为无法随机访问 map: key-value, 采用了hash思想, key尽量为string
- dict采用了哈希表,最低能在 O(1)时间内完成搜索。同样的java的HashMap也是采用了哈希表实现,不同是dict在发生哈希冲突的时候采用了开放寻址法,而HashMap采用了链接法。 iterator: 常迭代器, 逆迭代器