1.cout.setf() 函数
cout.setf(std::ios::left);
控制输出格式,这里通过设置格式状态的格式标志来控制
类似的还有:
ios::left 输出数据在本域宽范围内左对齐
ios::right 输出数据在本域宽范围内右对齐
ios::internal 数值的符号位在域宽内左对齐,数值右对齐,中间由填充字符填充
2.条件编译 #ifndef _ #define _
场景:多次引入头文件时报错重复声明变量
#ifndef HEAD_H
#define HEAD_H
……(头文件内容)
#endif
#ifndef 的是if no define,“如果没有定义,那么就定义”
其他形式:
第一种: #if 表达式 程序段1 #endif
第二种: #ifndef 表达式 程序段2 #endif
第三种: #ifdefine 表达式 程序段3 #endif
以上是三种基本的条件编译,可以嵌套。
3.getline()函数
逐行读取,分割字符串
getline ( istream &is , string &str , char delim )
is:输入流,如cin(详见cin.getline()),fstream,stringstream
str:把输入流读入的字符串存放在这个字符串中(可以自己随便命名,str什么的都可以)
delim:遇到这个字符停止读入,在不设置的情况下系统默认该字符为'\n',也就是回车换行符(遇到回车停止读入)
4.容器类 vector
vector(向量),C++的类,相当于一个动态数组
//头文件
#include<vector>
//生成存放string元素的容器“words”
vector<string> words
//通过push_back()函数添加元素
words.push_back(line);
//容器有值的元素个数size()
words.size()
//例
fstream f(file_path);
vector<string> words;
string line;
while (getline(f, line))
{
words.push_back(line);
}
for (int i = 0; i < words.size(); i++)
{
cout << words[i] << endl;
}
5.全局变量
有两个类都需要使用共同的变量,我们将这些变量定义为全局变量
遇到的问题:
编译单元
一个obj文件就是一个编译单元
一个.cpp(.c)和它相应的.h文件共同组成了一个编译单元
全局变量extern
其声明的函数和变量可以在本编译单元或其他编译单元中使用
推荐使用.h中声明,.cpp中定义的做法
注:即使在res.h中加#pragma once,或#ifndef也会出现重复定义,因为每个编译单元是单独的,都会对它各自进行定义
//声明
extern int a;
//定义
int a = 0;
int a;
extern int a = 0; //默认省略extern
静态全局变量static
static和extern不可同时出现
static修饰的全局变量的声明与定义同时进行,即当你在头文件中使用static声明了全局变量,同时它也被定义了。
在其他编译单元对它的修改并不影响本身在定义时的值
只是简单的把其值复制给了其他编译单元,每个编译单元都对它开辟了额外的空间进行存储
6.stringstream类
遇见场景(截取片段)
l = 1;
stringstream ss;
while (true)
{
ss << l;
analysis_table[l][0] = ss.str();
ss.clear();
ss.str("");
stringstream类
实现基于字符串流上的输入与输出操作
定义于头文件<sstream>下
头文件<sstream> 定义了三个类:istringstream、ostringstream 和 stringstream,分别用来进行流的输入、输出和输入输出操作
常用场景:
- 与字符串类型的转换(直接接收)
- 去字符串空格
- 分割字符串,一般跟getline一起用,作为getline的参数1
简单用法如下:
创建对象
//所需头文件
#include <sstream>
//创建对象,向对象输入字符串
stringstream ss;
ss << str;
stringstream ss(str);
str()函数,
str("")和clear() 方法都是清空对象,clear()适用于进行多次数据类型转换的场景,但感觉两个都是一起用的
//输出
cout << ss.str() << endl;
//修改对象的值
ss.str("123456");
cout << ss.str() << endl;
//清空
ss.str("");
去字符串空格
stringstream ss("2 dfjho 43");
string str;
while (ss >> str)
{
cout << str << endl;
}