如何做百度站长绑定网站/站长号
C语言的输入与输出
在C语言当中,我们使用最频繁的输入输出方式就是scanf与printf:
- scanf: 从标准输入设备(键盘)读取数据,并将读取到的值存放到某一指定变量当中。
- printf: 将指定的数据输出到标准输出设备(屏幕),使用时需要注意宽度输出和精度输出的控制。
C语言借助了相应的缓冲区来进行输入与输出。如下图所示:
对输入输出缓冲区的理解:
- 可以屏蔽掉低级I/O的实现。 低级I/O的实现依赖操作系统本身内核的实现,所以如果能够屏蔽这部分的差异,可以很容易写出可移植的程序。
- 可以使用这部分的内容实现“行”读取的行为。 对于计算机而言是没有“行”这个概念的,有了这部分,就可以定义“行”的概念,然后解析缓冲区的内容,返回一个“行”。
流是什么
“流”即是流动的意思,是物质从一处向另一处流动的过程,是对一种有序连续且有方向性的数据的抽象描述。
C++流是指信息从外部输入设备(如键盘)向计算机内部(如内存)输入和从计算机内部向外部输出设备(如显示器)输出的过程。这种输入输出的过程被形象的比喻为“流”。
它的特性是:有序连续、具有方向性
为了实现这种流动,C++定义了I/O标准类库,这些每个类都称为流/流类,用以完成某方面的功能
C++IO流
C++系统实现了一个庞大的类库,其中ios为基类,其他类都是直接或间接派生自ios类
C++标准IO流
C++标准库提供了4个全局流对象(cin、cout、cerr、clog):
- 使用cout进行标准输出,即数据从内存流向控制台(显示器)。
- 使用cin进行标准输入,即数据通过键盘输入到程序中。
- 使用cerr进行标准错误的输出。
- 使用clog进行日志的输出。
从上图可以看出,cout、cerr、clog都是由ostream类实例化出的三个不同的对象,因此这三个对象基本没什么区别,只是应用场景不同。
在使用时候必须要包含#include文件并引入std标准命名空间。
注意:
1、cin为缓冲流。 键盘输入的数据保存在缓冲区中,当要提取时,是从缓冲区中拿。 如果一次输入过多,会留在那儿慢慢用,如果输入错了,必须在回车之前修改,如果回车键按下就无法挽回了。只有把输入缓冲区中的数据取完后,才要求输入新的数据。
2、输入的数据类型必须与要提取的数据类型一致,否则出错。出错只是在流的状态字state中对应位置位(置1),程序继续。
3、空格和回车都可以作为数据之间的分格符,所以多个数据可以在一行输入,也可以分行输 入。但如果是字符型和字符串,则空格(ASCII码为32)无法用cin输入,字符串中也不能有空格。回车符也无法读入。
#include <iostream>
#include <string>
using namespace std;
int main(){string s;cin >> s; //输入:"hello world"cout << s << endl; //输出:"hello"return 0;
}
对于含有空格的字符串,我们需要使用getline函数进行读取,因为getline函数只有遇到’\n’才会停止读取。
#include <iostream>
#include <string>
using namespace std;
int main(){string s;getline(cin, s); //输入:"hello world"cout << s << endl; //输出:"hello world"return 0;
}
4、cin和cout可以直接输入和输出内置类型数据,原因:标准库已经将所有内置类型的输入和输出全部重载了
5、对于自定义类型,如果要支持cin和cout的标准输入输出,需要对<<和>>进行重载。
6、循环输入和输出
// 单个元素循环输入
while (cin >> a) {// ...
}
// 多个元素循环输入
while (c >> a >> b >> c) {// ...
}
// 整行接收
while (cin >> str) {// ...
}
7、istream类型对象转换为逻辑条件判断值
istream& operator>> (int& val);
explicit operator bool() const;
实际上我们看到使用while(cin>>i)去流中提取对象数据时,调用的operator>>,返回值是 istream类型的对象,那么这里可以做逻辑条件值,源自于istream的对象又调用了operator bool,operator bool调用时如果接收流失败,或者有结束标志,则返回false。
C++文件IO流
C++标准库中的<fstream>
头文件提供了用于文件输入和输出的类和接口。这些类通常与文件流对象一起使用,允许你打开、读取、写入和关闭文件。以下是一些常用的<fstream>
接口和类的介绍:
ifstream
(输入文件流):ifstream
类用于从文件中读取数据。
- 常用成员函数:
open(const char* filename, ios_base::openmode mode = ios_base::in)
:打开指定文件以供读取。mode
参数指定了文件的打开模式,例如ios::in
表示只读模式。close()
:关闭打开的文件。is_open()
:检查文件是否已经成功打开。get()
:从文件中读取一个字符。getline(char* buffer, streamsize count, char delim)
:从文件中读取一行文本,直到遇到指定的分隔符或达到指定的字符数。operator>>
:用于从文件中读取各种数据类型,例如int
、double
等。
ofstream
(输出文件流):
ofstream
类用于向文件中写入数据。- 常用成员函数:
open(const char* filename, ios_base::openmode mode = ios_base::out)
:打开指定文件以供写入。mode
参数指定了文件的打开模式,例如ios::out
表示只写模式。close()
:关闭打开的文件。is_open()
:检查文件是否已经成功打开。put(char c)
:将字符写入文件。write(const char* buffer, streamsize count)
:将指定数量的字节写入文件。operator<<
:用于将各种数据类型写入文件,例如int
、double
等。
fstream
(文件流):
fstream
类可用于既可以读取又可以写入文件的情况。- 它继承了
ifstream
和ofstream
的所有成员函数,因此可以用于打开、读取和写入文件。
以下是一些常见的文件打开模式:
- ios::in:
- 打开文件以供读取。可以使用
ifstream
类或fstream
类来读取文件内容。
- 打开文件以供读取。可以使用
- ios::out:
- 打开文件以供写入。可以使用
ofstream
类或fstream
类来写入文件内容。如果文件不存在,则会创建一个新文件;如果文件已存在,则会截断(清空)文件内容。
- 打开文件以供写入。可以使用
- ios::app:
- 打开文件以供追加写入。新数据将被添加到文件的末尾,而不会截断文件内容。如果文件不存在,则会创建一个新文件。
- ios::binary:
- 以二进制模式打开文件。这个模式用于处理二进制文件,如图像、音频或其他非文本文件。在二进制模式下,不会执行文本的自动换行和转换。
- ios::ate:
- 打开文件后,将文件指针移到文件的末尾。这可以让你立即开始读取或写入文件的末尾部分。
- ios::trunc:
- 如果文件已存在,在打开文件时会截断(清空)文件内容。通常与
ios::out
一起使用,以确保文件被清空后写入新数据。
- 如果文件已存在,在打开文件时会截断(清空)文件内容。通常与
这些打开模式可以组合使用,通过按位或运算符|
来实现。例如,要以二进制追加写入的方式打开文件,可以使用ios::binary | ios::app
。
代码示例:
#include <iostream>
#include <fstream>
using namespace std;int main() {// 打开一个文本文件以供读取ifstream inputFile("input.txt", ios::in);// 打开一个二进制文件以供写入,如果不存在则创建ofstream binaryFile("output.bin", ios::out | ios::binary);// 打开一个文本文件以供追加写入ofstream appendFile("log.txt", ios::out | ios::app);if (inputFile.is_open() && binaryFile.is_open() && appendFile.is_open()) {// 文件已成功打开,可以进行读取和写入操作// ...// 关闭文件inputFile.close();binaryFile.close();appendFile.close();} else {cout << "无法打开文件" << endl;}return 0;
}
控制文件指针位置
tellg
和seekg
是C++中用于在文件流对象中控制文件指针位置的函数,通常与ifstream
和fstream
一起使用,用于读取文件的特定位置或获取当前文件指针的位置。
-
tellg
函数:tellg
函数用于获取当前文件指针的位置(读取位置)。它返回一个类型为streampos
的值,表示当前文件指针的位置。streampos
通常是一个整数类型,用于表示文件的字节偏移量。用法示例:
ifstream inputFile("example.txt", ios::in);if (inputFile.is_open()) {// 获取当前文件指针的位置streampos currentPosition = inputFile.tellg();cout << "当前文件指针位置:" << currentPosition << endl;// 读取文件内容// ...// 获取新的文件指针位置currentPosition = inputFile.tellg();cout << "新的文件指针位置:" << currentPosition << endl; }
-
seekg
函数:seekg
函数用于设置文件指针的位置,以便在文件中进行定位。它允许你将文件指针移动到文件的特定位置,以便读取或写入数据。seekg
接受两个参数,第一个参数是偏移量,第二个参数是基准位置,用于确定偏移量是相对于文件的开头、当前位置还是文件的末尾。基准位置可以是以下之一:
ios::beg
:基于文件的开头。ios::cur
:基于当前文件指针位置。ios::end
:基于文件的末尾。
用法示例:
ifstream inputFile("example.txt", ios::in);if (inputFile.is_open()) {// 将文件指针移动到文件的第10个字节(相对于文件开头)inputFile.seekg(10, ios::beg);// 读取从第10个字节开始的内容string data;inputFile >> data;cout << "从第10个字节开始的内容:" << data << endl;// 将文件指针移动到文件末尾inputFile.seekg(0, ios::end);// 获取文件末尾的位置streampos endPosition = inputFile.tellg();cout << "文件末尾位置:" << endPosition << endl; }
文件操作示例
以二进制的形式操作文件
以二进制的形式对文件进行写入操作:
//以二进制的形式对文件进行写入
void WriteBinary(){ofstream ofile; //定义文件流对象ofile.open("test.bin", ofstream::out | ofstream::binary); //以二进制写入的方式打开test.bin文件char data[] = "Hello World";ofile.write(data, strlen(data)); //将data字符串写入文件ofile.put('!'); //将字符'!'写入文件ofile.close(); //关闭文件
}
以二进制的形式对文件进行读取操作:
//以二进制的形式对文件进行读取
void ReadBinary(){ifstream ifile; //定义文件流对象ifile.open("test.bin", ofstream::in | ofstream::binary); //以二进制读取的方式打开test.bin文件ifile.seekg(0, ifile.end); //跳转到文件末尾int length = ifile.tellg(); //获取当前字符在文件当中的位置,即文件的字符总数ifile.seekg(0, ifile.beg); //重新回到文件开头char data[100];ifile.read(data, length); //将文件当中的数据全部读取到字符串data当中ifile.close(); //关闭文件
}
以文本的形式操作文件
以文本的形式对文件进行写入操作:
//以文本的形式对文件进行写入
void WriteTxt(){ofstream ofile; //定义文件流对象ofile.open("test.txt"); //以写入的方式打开test.txt文件char data[] = "Hello World";ofile.write(data, strlen(data)); //将data字符串写入文件ofile.put('!'); //将字符'!'写入文件ofile.close(); //关闭文件
}
以文本的形式对文件进行读取操作:
//以文本的形式对文件进行读取
void ReadTxt(){ifstream ifile; //定义文件流对象ifile.open("test.txt"); //以读取的方式打开test.txt文件ifile.seekg(0, ifile.end); //跳转到文件末尾int length = ifile.tellg(); //获取当前字符在文件当中的位置,即文件的字符总数ifile.seekg(0, ifile.beg); //重新回到文件开头char data[100];ifile.read(data, length); //将文件当中的数据全部读取到字符串data当中cout << length << endl;cout << data << endl;ifile.close(); //关闭文件
}
注意: 使用ofstream类对象的open函数时,若不指定打开方式,则默认以写的方式打开文件;使用ifstream类对象的open函数时,若不指定打开方式,则默认以读的方式打开文件;使用fstream类对象的open函数时,若不指定打开方式,则默认以写+读的方式打开文件。
使用>>和<<对文件进行操作
使用>>和<<运算符对文件进行读写操作,会变得很简单,也很形象。
对文件进行写入操作:
//对文件进行写入操作
void WriteFile(){ofstream ofs("data.txt"); //定义文件流对象,并打开文件ofs << "Hello World"; //字符串“流入”文件ofs.close(); //关闭文件
}
对文件进行读取操作:
//对文件进行读取操作
void ReadFile(){ifstream ifs("data.txt"); //定义文件流对象,并打开文件char data[100];ifs >> data; //文件数据“流入”字符串dataifs.close(); //关闭文件
}
stringstream流
在C语言中,我们若是想要将一个整型变量的数据转化为字符串格式,有以下两种方法:
1、使用itoa函数进行转化。
int a = 10;
char arr[10];
itoa(a, arr, 10); //将整型的a转化为十进制字符数字存储在字符串arr当中
2、使用sprintf函数进行转化。
int a = 10;
char arr[10];
sprintf(arr, "%d", a); //将整型的a转化为字符串格式存储在字符串arr当中
虽然itoa函数和sprintf函数都能完成转化,但是在两个函数在转化时,都需要先给出保存结果的空间,而空间的大小是不太好界定的,除此之外,转化格式不匹配时,可能还会得到错误的结果甚至程序崩溃。
在C++中,我们可以使用stringstream类对象来避开此问题。在程序当中如果想要使用stringstream,必须要包含头文件sstream。在该头文件下,有三个类:
类 | 对应操作场景 |
---|---|
ostringstream | 输出操作 |
istringstream | 输入操作 |
stringstream | 输入操作+输出操作 |
以下是stringstream
的一些常用接口:
1、stringstream
的构造函数:
stringstream()
:创建一个空的字符串流。
stringstream(std::string str)
:使用给定的字符串 str
初始化字符串流。
2、插入数据到字符串流:
<<
操作符:插入数据到字符串流中。你可以使用它来插入各种数据类型,如整数、浮点数、字符串等。
std::stringstream ss;
int num = 42;
ss << "The answer is: " << num;
3、从字符串流中提取数据:
>>
操作符:从字符串流中提取数据。你可以使用它来提取数据到不同的数据类型。
int extractedNum;
ss >> extractedNum;
4、获取字符串流中的字符串:
str()
函数:获取字符串流中的全部内容作为一个字符串。
std::string content = ss.str();
5、清空字符串流:
clear()
函数:清空字符串流的状态和内容。
ss.clear();
6、指定基数(进制):
std::hex
、std::oct
、std::dec
:可以使用这些流控制器来指定插入或提取整数时的进制,如十六进制、八进制或十进制。
int num = 255;
ss << std::hex << num; // 将 num 以十六进制插入
7、获取当前位置:
tellg()
函数:获取当前的读取位置。
std::streampos pos = ss.tellg();
8、设置读取位置:
seekg(std::streampos pos)
:将读取位置设置为指定的位置。
ss.seekg(0); // 设置读取位置为开头
stringstream流操作示例
1、将数值类型数据格式化为字符串。
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main(){int a = 10;string sa;stringstream s;s << a; //将int类型的a放入输入流s >> sa; //从s中抽取前面插入的int类型的值,赋值给string类型(方式一)cout << sa << endl;s.str(""); //将stringstream底层管理的string对象设置为""。s.clear(); //将上次转换状态清空掉//进行下一次转换double b = 3.14;s << b;sa = s.str(); //获取stringstream中管理的string类型(方式二)cout << sa << endl;return 0;
}
2、字符串拼接。
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main(){string rets;stringstream s;s << "Hello" << "World"; //将多个字符串放入stringstream中s >> rets; //方式一获取cout << rets << endl;s.str(""); //将stringstream底层管理的string对象设置为空字符串s.clear(); //将上次转换状态清空掉s << "Thanks" << " " << "for" << " " << "reading"; //将多个字符串放入stringstream中rets = s.str(); //方式二获取cout << rets << endl;return 0;
}
注意事项:
- stringstream实际是在底层维护了一个string类型的对象用来保存结果。
- stringstream在转换结尾时(即最后一个转换后),会将其内部状态设置为badbit,因此在下一次转换前必须调用clear将状态重置为goodbit才可以转换,但clear不会将stringstream底层的string对象清空。
- 可以使用s.str(“”)的方式将stringstream底层的string对象设置为空字符串,否则多次转换时,会将结果全部累积在底层string对象中。
- 获取stringstream转换后的结果有两个方法,一是使用>>运算符之间从流当中提取,二是使用s.str( )获取stringstream底层的string对象。
- stringstream使用string类对象代替字符数组,可以避免缓冲区溢出的危险,而且其会对参数类型进行推演,不需要格式化控制,也不会存在格式化失败的风险,因此使用更方便,更安全。
相关文章:

<C++> IO流
C语言的输入与输出 在C语言当中,我们使用最频繁的输入输出方式就是scanf与printf: scanf: 从标准输入设备(键盘)读取数据,并将读取到的值存放到某一指定变量当中。printf: 将指定的数据输出到…...

基于单目相机的2D测量(工件尺寸和物体尺寸)
目录 1.简介 2.基于单目相机的2D测量 2.1 想法: 2.2 代码思路 2.2 主函数部分 1.简介 基于单目相机的2D测量技术在许多领域中具有重要的背景和意义。 工业制造:在工业制造过程中,精确测量是确保产品质量和一致性的关键。基于单目相机的2…...

23面向对象案例1
目录 1、计算连续表达式的一个过程 2、优化后的代码 为什么不能return resultn? 3、用面向对象的方法可以解决冗余的问题,但是还是不能解决result的值可以被随意修改的问题 4、解决不能被随意修改的问题,可以将类属性改成私有变量吗&…...

go语言基础之常量与itoa
视频学习地址:Go零基础入门_在线视频教程-CSDN程序员研修院 一. 常量 定义:常量是一个简单值的标识符,在程序运行时,不会被修改的量。注意:常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数…...

民宿酒店订房房态商城小程序的作用是什么
外出旅游出差,酒店民宿总是很好的选择,随着经济复苏,各地旅游及外出办公人次增多,酒店成绩随之增加,市场呈现多品牌酒店经营形式。 区别于以前,如今互联网深入各个行业,酒店经营也面临着困境。…...

acwing算法基础之数据结构--栈和队列
目录 1 知识点2 模板 1 知识点 栈:先进后出。先进的就是栈底,后进的就是栈顶。后进先出嘛,所以在栈顶弹出元素。 队列:先进先出。先进的就是队头,后进的就是队尾。先进先出嘛,所以在队头弹出元素。 单调…...

关于导出的Excel文件的本质
上篇文章中提到关于xlsx改造冻结窗格的代码,我是怎么知道要加pane的呢,加下来就把我的心路历程记录一下。 我改造之前也是没有头绪的,我网上查了很多,只告诉我如何使用,但源码里没有针对!freeze的处理,所以…...

Rust中FnOnce如何传递给一个约束Fn的回调
Rust中FnOnce如何传递给一个约束Fn的回调 下面的代码,set_cb(func);会报错,如何包装能够做到这样的效果: fn set_cb<F: Fn() static>(handler: F) {handler(); }fn main() {let join_handle std::thread::spawn(|| {});let func |…...

【JUC】线程通信与等待唤醒机制
文章目录 1. 线程通信2. Object类中的wait和notify方法实现等待和唤醒3. Condition接口中的await和signal方法实现等待和唤醒4. LockSupport实现等待和唤醒4.1 优点 1. 线程通信 多个线程在处理同一个资源,但是处理的动作(线程的任务)却不相…...

C#面对对象(英雄联盟人物管理系统)
目录 英雄信息类 因为要在两个窗体里面调用字典,所以要写两个类来构建全局变量 添加功能 查询功能 英雄信息类 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WindowsFormsApp…...

2023年中国分布式光纤传感产量、需求量及行业市场规模分析[图]
分布式光纤传感器中的光纤能够集传感、传输功能于一体,能够完成在整条光纤长度上环境参量的空间、时间多维连续测量,具有结构简单、易于布设、性价比高、易实现长距离等独特优点,常用的分布式光纤传感器有光时域反射仪、布里渊分析仪、喇曼反…...

B2R Raven: 2靶机渗透
B2R Raven: 2靶机渗透 视频参考:ajest :https://www.zhihu.com/zvideo/1547357583714775040?utm_id0 原文参考:ajest :https://zhuanlan.zhihu.com/p/270343652 文章目录 B2R Raven: 2靶机渗透1 启动靶机,查看后网卡…...

SpringBoot-黑马程序员-学习笔记(六)
目录 76.常用计量单位使用 77.bean属性校验 81.测试表现层 82.发送虚拟请求 94.springboot读写redis的客户端 100.ElasticSearch(简称ES) 一个分布式全文搜索引擎 76.常用计量单位使用 Data Component ConfigurationProperties(prefix "serve…...

unity2022版本 实现手机虚拟操作杆
简介 在许多移动游戏中,虚拟操纵杆是一个重要的用户界面元素,用于控制角色或物体的移动。本文将介绍如何在Unity中实现虚拟操纵杆,提供了一段用于移动控制的代码。我们将讨论不同类型的虚拟操纵杆,如固定和跟随,以及如…...

『GitHub Actions』部署静态博客指南
前言 之前博主是使用的 Jenkins 实现 vuepress 博客的自动部署与持续交付,但是因为现在迁移服务器到海外,并且服务器配置降低。现在经常出现服务器的 Jenkins 构建过程中 CPU 占用率过高,导致服务器卡死 然后我想的话既然只是部署静态博客&…...

WPF Datagrid Header数据绑定,表头复选框实现全选、全否、部分选中,根据条目动态变化
制作一个根表头为CheckBox可全选、全不选的列表,且可根据条目自动调整CheckBox的状态(选中、不选、部分选中)。 本来是想用DataGrid做一个CheckBox的列用于勾选其中的某些行,当时做出来之后想着添加一个全选、全否的功能。做两个…...

Tensorflow2 中对模型进行编译,不同loss函数的选择下输入数据格式需求变化
一、tf2中常用的损失函数介绍 在 TensorFlow 2 中,编译模型时可以选择不同的损失函数来定义模型的目标函数。不同的损失函数适用于不同的问题类型和模型架构。下面是几种常见的损失函数以及它们的作用和适用场景: 1.均方误差(Mean Squared …...

【python】基础语法(三)--异常、模块、包
异常 代码中出现的报错问题,可能会导致整个代码的停止,为了避免这种情况,有了捕获异常操作; 捕获异常 提前预知可能出错的代码,做好准备,避免因bug导致整个项目停止; try:可能出…...

XGBoost+LR融合
1、背景简介 xgboostlr模型融合方法用于分类或者回归的思想最早由facebook在广告ctr预测中提出,其论文Practical Lessons from Predicting Clicks on Ads at Facebook有对其进行阐述。在这篇论文中他们提出了一种将xgboost作为feature transform的方法。大概的思想…...

leetcode:1929. 数组串联(python3解法)
难度:简单 给你一个长度为 n 的整数数组 nums 。请你构建一个长度为 2n 的答案数组 ans ,数组下标 从 0 开始计数 ,对于所有 0 < i < n 的 i ,满足下述所有要求: ans[i] nums[i]ans[i n] nums[i] 具体而言&am…...

Epoch和episodes的区别
“Epoch” 和 “episode” 是两个不同的概念,通常在不同领域中使用。 Epoch(周期): Epoch 是一个在机器学习和深度学习中常用的术语,通常用于表示训练数据集中的一个完整遍历。在每个 epoch 中,整个训练数据…...

漏洞复现--华测监测预警系统2.2任意文件读取
免责声明: 文章中涉及的漏洞均已修复,敏感信息均已做打码处理,文章仅做经验分享用途,切勿当真,未授权的攻击属于非法行为!文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…...

数据结构 - 6(优先级队列(堆)13000字详解)
一:堆 1.1 堆的基本概念 堆分为两种:大堆和小堆。它们之间的区别在于元素在堆中的排列顺序和访问方式。 大堆(Max Heap): 在大堆中,父节点的值比它的子节点的值要大。也就是说,堆的根节点是堆…...

Js高级技巧—拖放
拖放基本功能实现 拖放是一种非常流行的用户界面模式。它的概念很简单:点击某个对象,并按住鼠标按钮不放,将 鼠标移动到另一个区域,然后释放鼠标按钮将对象“放”在这里。拖放功能也流行到了 Web 上,成为 了一些更传统…...

ELF和静态链接:为什么程序无法同时在Linux和Windows下运行?
目录 疑问 编译、链接和装载:拆解程序执行 ELF 格式和链接:理解链接过程 小结 疑问 既然我们的程序最终都被变成了一条条机器码去执行,那为什么同一个程序,在同一台计算机上,在 Linux 下可以运行,而在…...

【爬虫实战】python微博热搜榜Top50
一.最终效果 二.项目代码 2.1 新建项目 本文使用scrapy分布式、多线程爬虫框架编写的高性能爬虫,因此新建、运行scrapy项目3步骤: 1.新建项目: scrapy startproject weibo_hot 2.新建 spider: scrapy genspider hot_search "weibo.com" 3…...

【网络基础】——传输层
目录 前言 传输层 端口号 端口号范围划分 知名端口号 进程与端口号的关系 netstat UDP协议 UDP协议位置 UDP协议格式 UDP协议特点 面向数据报 UDP缓冲区 UDP的使用注意事项 基于UDP的应用层协议 TCP协议 TCP简介 TCP协议格式 确认应答机制&#…...

删除字符串特定的字符(fF)C语言
代码: #include <stdio.h> void funDel(char *str) {int i, j;for (i j 0; str[i] ! \0; i)if (str[i] ! f && str[i] ! F)str[j] str[i];str[j] \0; }int main() {char str[100];printf("请输入一个字符串:");gets(str);pr…...

C++入门(1):命名空间,IO流 输入输出,缺省参数
一、命名空间 1.1 命名空间的作用: 避免标识符命名冲突 1.2 命名空间定义: 关键字:namespace namespace test {// 命名空间内可以定义变量/函数/类型int a 10;int Add(int x, int y){return x y;}struct Stack{int* a;int top;int …...

Go 语言面试题(三):并发编程
文章目录 Q1 无缓冲的 channel 和 有缓冲的 channel 的区别?Q2 什么是协程泄露(Goroutine Leak)?Q3 Go 可以限制运行时操作系统线程的数量吗? Q1 无缓冲的 channel 和 有缓冲的 channel 的区别? 对于无缓冲的 channel,…...