1.读写二进制文件进数组
无需包含头文件
1.1.快速写入二进制文件
int data1[10] = { 1,2,3,4,5,6,7,8,9,10 };
//定义文件指针
FILE* fp;
//打开文件 ;文件指针,文件名,打开方式
fopen_s(&fp, "mapA", "wb");
//没打开 退出
if (fp == NULL) return 0;
//写入 返回数据长度 ;数据的地址,;元素大小;元素个数;文件指针
fwrite(data1, 1, sizeof(data1), fp);
//关闭文件流
fclose(fp);
注意 fweite()函数,以下使用方式均可
fwrite(data1, 1, sizeof(data1), fp);
fwrite(data1, sizeof(data1),1, fp);
fwrite(data1, 10, sizeof(int), fp);
fwrite(data1, sizeof(int), 10,fp);
1.2读取二进制文件
int data2[10];
FILE* fp2;
fopen_s(&fp2, "mapA", "rb");
if (fp2 == NULL) return 0; //空指针则返回0,文件打开失败
fread(data2, 1, sizeof(data1), fp2);
fclose(fp2);
fread()函数使用方法如 fweite()。
1.3打印结果
for (int i = 0; i < 10; i++)
{
cout << data2[i] << " ";
}
结果如下
2.读写txt文件
需要包含头文件 <fstream>
2.1 写入txt文件
//待写入的数组
int data1[10] = {1,2,3,4,5,6,7,8,9,10};
//创建打开文件
ofstream fout("mapA.txt");
//循环写入
for (int i = 0; i < 10; i++) {
fout << data1[i] << " ";
}
fout << endl;
for (int i = 0; i < 10; i++) {
fout << data1[i]*2 << " ";
}
fout << endl;
//关闭文件
fout.close();
2.2读取txt文件
int data2[20];
ifstream inFile;
int x;
inFile.open("mapA.txt");
if (!inFile) {
cout << "Unable to open file";
exit(1); // terminate with error
}
int i = 0;
while (inFile >> x) {
data2[i] = x;
i++;
}
inFile.close();
for (int i = 0; i < 20; i++)
{
cout << data2[i] << " ";
}
2.2输出结果
3.切分字符串
以‘|’切成行,以“,”切成元素。
//要分割的字符串
string str = "1,2,3,4,5|5,4,3,2,1|0,0,0,0,0|";
//分割后字符串存放位置
int data[5][5];
int start = 0, end = 0;
int row = 0, col = 0;
while (true)
{
//找到‘|’分隔符位置
end = str.find('|', start);
//达到条件退出
if (start >= end) break;
//取一行字符串
string line = str.substr(start, end - start);
//切每行的字符
char* next = NULL;
char* item = strtok_s((char*)line.c_str(), ",", &next);
//将切完的字符放进data数组中
col = 0;
while (item)
{
//string->int 用atoi()
data[row][col] = atoi(item);
col++;
//继续切
item = strtok_s(NULL, ",", &next);
}
start = end+1;
row++;
}
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
cout << data[i][j] << " ";
}
cout << endl;
}