C++学习笔记1(项目中遇到的问题)

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("");

参考文章:

stringsream的简单用法

C++ stringstream

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;
}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值