写一个函数名为read_file_content的C++函数,根据文件名把一个文件内容读入到std::string
时间: 2024-05-09 21:19:28 浏览: 95
中,并返回该字符串。
函数原型如下:
```cpp
#include <string>
std::string read_file_content(const char* filename);
```
示例:
如果文件 `test.txt` 包含以下内容:
```
Hello world!
```
则调用 `read_file_content("test.txt")` 返回字符串 `"Hello world!\n"`。
函数实现:
```cpp
#include <fstream>
#include <sstream>
std::string read_file_content(const char* filename) {
std::ifstream ifs(filename);
if (!ifs) {
throw std::runtime_error("failed to open file");
}
std::ostringstream oss;
oss << ifs.rdbuf();
return oss.str();
}
```
相关问题
c++编写一个read函数,作用:将文件中的矩阵读入内存的数组中 函数的返回值:读取成功返回0,失败返回-1
下面是一个简单的 C++ 函数,用于从文件中读取矩阵并将其存储到数组中。如果读取成功,函数将返回0,否则返回-1。
```c++
#include <fstream>
#include <vector>
int read_matrix(const char* filename, std::vector<std::vector<int>>& matrix) {
std::ifstream file(filename);
if (!file.is_open()) {
return -1; // 打开文件失败,返回-1
}
matrix.clear(); // 清空矩阵
std::string line;
while (std::getline(file, line)) {
std::vector<int> row;
std::istringstream iss(line);
int num;
while (iss >> num) {
row.push_back(num);
}
if (!row.empty()) {
matrix.push_back(row);
}
}
file.close();
return 0; // 读取成功,返回0
}
```
这个函数接受一个文件名和一个二维向量作为参数,读取文件中的矩阵,并将其存储到二维向量中。每一行表示矩阵中的一行,每一列之间用空格分隔。如果读取成功,函数返回0,否则返回-1。
使用示例:
```c++
#include <iostream>
int main() {
std::vector<std::vector<int>> matrix;
if (read_matrix("matrix.txt", matrix) == 0) {
// 读取成功,输出矩阵
for (const auto& row : matrix) {
for (const auto& num : row) {
std::cout << num << " ";
}
std::cout << std::endl;
}
} else {
// 读取失败,输出错误信息
std::cout << "Failed to read matrix from file" << std::endl;
}
return 0;
}
```
. 某班需要从文本文件1.txt或二进制文件1.dat中读入若干同学的《面向对象程序设计》成绩求平均值,并把平均值输出到屏幕上。现在要求设计一个File类完成此项工作。 class File { private: string filename; int filetype; //文本文件(filetype==1)、二进制文件(filetype==0) public: File(string s, int t){filename=s; filetype=t;} double readfile(); //从文件读入成绩求平均值并返回该值 }; (1)完成readfile函数; (2)使用main函数完成File类的测试。
以下是实现File类的示例代码:
```c++
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class File {
private:
string filename;
int filetype; //文本文件(filetype==1)、二进制文件(filetype==0)
public:
File(string s, int t) {
filename = s;
filetype = t;
}
double readfile() {
double sum = 0;
int count = 0;
if (filetype == 1) { //文本文件
ifstream infile(filename);
if (!infile) {
cerr << "无法打开文件!" << endl;
exit(1);
}
double score;
while (infile >> score) {
sum += score;
count++;
}
infile.close();
}
else if (filetype == 0) { //二进制文件
ifstream infile(filename, ios::binary);
if (!infile) {
cerr << "无法打开文件!" << endl;
exit(1);
}
double score;
while (infile.read((char*)&score, sizeof(double))) {
sum += score;
count++;
}
infile.close();
}
if (count == 0) {
cerr << "文件中没有数据!" << endl;
exit(1);
}
return sum / count;
}
};
int main() {
string filename;
int filetype;
cout << "请输入文件名:";
cin >> filename;
cout << "请输入文件类型(1表示文本文件,0表示二进制文件):";
cin >> filetype;
File f(filename, filetype);
double average = f.readfile();
cout << "平均值为:" << average << endl;
return 0;
}
```
在上述代码中,readfile函数根据filetype的值来判断文件类型,然后使用ifstream读入文件数据并计算平均值。在main函数中,首先要求用户输入文件名和文件类型,然后创建File对象并调用readfile函数计算平均值,最后输出平均值。
阅读全文