getline函数
在C++中,getline
是一个标准库函数,用于从输入流中读取字符串或一行文本。它是 <string>
头文件的一部分。getline
函数会从输入流中提取字符,并将它们附加到字符串对象中,直到遇到分隔符为止。如果没有指定分隔符,getline
会读取直到下一个换行符。getline
函数通常用于读取用户输入或从文件中读取行。它可以确保即使输入中包含空格也能完整地读取整行。
举个例子🌰⬇️
void solve1(){
freopen("infections.txt","r", stdin);
vector<int> nums;
string s;
// 不断读取字符串,直到读到':'为止
while(getline(cin, s,':')){
int num = stoi(s);
nums.push_back(num);
}
for(auto num : nums) cout << num << " ";
}
Freopen函数
在C++中,freopen 函数是用来重新打开一个已有的文件流(FILE*)与一个新的文件或者模式(mode)关联起来。这个函数定义在 <cstdio> 头文件中。当你想要改变一个已经打开的文件流的文件或者模式时,freopen 可以非常有用。例如,你可以用它来重定向标准输入输出流,如 stdin、stdout 或 stderr。
freopen 的函数原型如下:
FILE* freopen(const char* filename, const char* mode, FILE* stream);
一般的的使用就是
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
ifstream输入文件流和ofstream输出文件流
ifstream
的基本用法如下:
- 创建
ifstream
对象:首先,你需要创建一个ifstream
对象,并将其与要读取的文件关联起来。 - 打开文件:使用
ifstream
对象的open
方法打开文件。如果文件成功打开,你就可以开始读取数据。 - 读取数据:可以使用多种方法读取文件内容,例如使用
>>
运算符或getline
函数。getline
特别适合按行读取文本文件。 - 关闭文件:完成文件读取后,应该使用
close
方法关闭文件。
void solve3(){
ifstream fin("infections.txt"); // 创建输入流对象fin
ofstream fout("ans5.txt"); // 创建输出流对象fout
string s;
vector<int> nums;
while(getline(fin, s, ':')) nums.push_back(stoi(s));
for(auto x : nums) fout << x << " ";
}
// 注意传入的是地址&
void my_read(const string& path, vector<int>& nums){
ifstream fin(path); // 如果要设计读文件函数的话
string s;
while(getline(fin, s, ':')) nums.pus
h_back(stoi(s));
}
字符串流的读取
istringstream
是C++标准库中的一个类,它属于sstream
(字符串流)类的一部分。istringstream
对象通常用于执行C++字符串的输入操作。
以下是istringstream
的一些基本用法:
- 从字符串中读取数据:你可以使用
istringstream
从字符串中读取各种类型的数据,就像从输入流中读取数据一样。例如:
#include <sstream>
#include <iostream>
using namespace std;
int main() {
string str = "123 456";
istringstream iss(str);
int a, b;
iss >> a >> b;
cout << "a: " << a << ", b: " << b << endl; // 输出:a: 123, b: 456
return 0;
}
- 分割字符串:你可以使用
istringstream
来分割字符串。例如,你可以使用空格作为分隔符来分割一个包含多个单词的字符串:
#include <sstream>
#include <iostream>
using namespace std;
int main() {
string str = "Hello World from istringstream";
istringstream iss(str);
string word;
while (iss >> word) {
cout << word << endl;
}
return 0;
}
这段代码将输出:
Hello
World
from
istringstream
ostringstream的用法
ostringstream
是C++标准库中的一个类,它属于sstream
(字符串流)类的一部分。ostringstream
对象通常用于执行C++字符串的输出操作。
以下是ostringstream
的一些基本用法:
- 将数据转换为字符串:你可以使用
ostringstream
将各种类型的数据转换为字符串。例如:
#include <sstream>
#include <iostream>
using namespace std;
int main() {
int a = 123;
double b = 456.789;
ostringstream oss;
oss << "a: " << a << ", b: " << b;
string str = oss.str();
cout << str << endl; // 输出:a: 123, b: 456.789
return 0;
}
- 创建复杂的字符串:你可以使用
ostringstream
来创建复杂的字符串,这比使用字符串连接(+
操作符)更有效。例如:
#include <sstream>
#include <iostream>
using namespace std;
int main() {
ostringstream oss;
for (int i = 1; i <= 5; i++) {
oss << "This is line " << i << ".\n";
}
string str = oss.str();
cout << str;
return 0;
}
这段代码将输出:
This is line 1.
This is line 2.
This is line 3.
This is line 4.
This is line 5.