日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++读取txt数据为二维数组 将数据保存到txt文本中

發(fā)布時(shí)間:2024/4/15 c/c++ 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++读取txt数据为二维数组 将数据保存到txt文本中 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ??C++讀取txt數(shù)據(jù)為二維數(shù)組 保存txt文本數(shù)據(jù)

? ? C++文件讀寫操作有:ofstream,ifstream,fstream: #include <fstream> ofstream //文件寫操作 內(nèi)存寫入存儲(chǔ)設(shè)備 ifstream //文件讀操作,存儲(chǔ)設(shè)備讀區(qū)到內(nèi)存中 fstream //讀寫操作,對(duì)打開的文件可進(jìn)行讀寫操作 ? ?詳細(xì)資料請(qǐng)參考:http://blog.csdn.net/kingstar158/article/details/6859379 ? ?C++獲取二維數(shù)組的行列數(shù)的方法:
//對(duì)于type array[A][B];形式的二維數(shù)組,可以通過計(jì)算sizeof獲取行列數(shù)。 sizeof(array[0][0])//為一個(gè)元素占用的空間, sizeof(array[0]) //為一行元素占用的空間, sizeof(array) //為整個(gè)數(shù)組占用的空間, 行數(shù) = sizeof(array)/sizeof(array[0]); 列數(shù) = sizeof(array[0])/sizeof(array[0][0]); #include <iostream> using namespace std; template <class T> int getArrayLen(T& array) //使用模板定義一個(gè)函數(shù)getArrayLen,該函數(shù)將返回?cái)?shù)組array的長度 { return (sizeof(array) / sizeof(array[0])); } int main() { char a[] = {'1','2','3'}; cout << getArrayLen(a) << endl; return 0; } 輸出為3

例子:

【1】C++讀取txt數(shù)據(jù)為二維數(shù)組

? ? ?imageData.txt文本的數(shù)據(jù)如下:

10.0 25 30 100 200 1000 1 2 31 2 3

? ? C++讀取imageData.txt文本的數(shù)據(jù),并將數(shù)據(jù)轉(zhuǎn)存為二維數(shù)組的方法

#include "stdafx.h" #include <iostream> #include <cstring> #include <io.h> #include <fstream> using namespace std;//txt文本必須是txtRows行,txtCols列存儲(chǔ)的文本數(shù)據(jù) #define readDataPath "D:\\imageData.txt"//txt文本的路徑 #define txtRows 4 //txt行數(shù) #define txtCols 3 //txt列數(shù) int main() {float txtData[txtRows][txtCols];int i, j;FILE* fp = fopen(readDataPath, "r"); //打開文件 if (fp == NULL){printf("文件讀取錯(cuò)誤...");return -1;}for (i = 0; i < txtRows; i++){for (j = 0; j < txtCols; j++){fscanf(fp, "%f", &txtData[i][j]);/*每次讀取一個(gè)數(shù),fscanf函數(shù)遇到空格或者換行結(jié)束*/}fscanf(fp, "\n");}fclose(fp);for (i = 0; i < txtRows; i++){for (j = 0; j < txtCols; j++){printf("%.1f ", txtData[i][j]);//輸出 }printf("\n");}return 0; }

? ?運(yùn)行結(jié)果:


【2】讀取txt文本中的字符

? ?imageName.txt文本的數(shù)據(jù)如下:

1.jpg 2.jpg 3.jpg

? ?C++讀取方法如下:

// CppPython.cpp : 定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。 //#include "stdafx.h" #include <fstream> #include <string> #include <iostream> using namespace std;//txt文本每行存儲(chǔ)一個(gè)字符串 #define readDataPath "D:\\imageName.txt" //txt文本的路徑 int main() {ifstream txtStream(readDataPath);string line;if (!txtStream.is_open())cout << "Error opening file";//(1)推薦這個(gè)寫法while (getline(txtStream, line)) // line中不包括每行的換行符{cout << line << endl;}//(2)使用eof()判斷,會(huì)多出一行空的while (!txtStream.eof()){getline(txtStream, line);cout << line << endl;}//或者用字符數(shù)組存儲(chǔ)char buffer[256];while (!txtStream.eof())//eof():如果讀文件到達(dá)文件末尾,返回true。{txtStream.getline(buffer, 100);cout << buffer<< endl;}return 0; }

【3】txt文本復(fù)雜的情況

? ? 假設(shè)data.txt的數(shù)據(jù)如下:?每行是一個(gè)樣本,每行的第1列是一個(gè)字符串,其余是整型的數(shù)據(jù)

1.jpg 11 12 13 14 15 2.jpg 1 2 3 4 5 3.jpg 111 121 131 141 151

? ?這里把第1列的字符串保存在vector中,其余數(shù)據(jù)保存在二維數(shù)組data中,C++實(shí)現(xiàn)代碼如下:

#include <fstream> #include <string> #include "vector" #include <iostream> using namespace std;//txt文本的路徑 #define readDataPath "D:\\MyGitPro\\imageData\\data.txt" #define txtRows 3//txt文本行數(shù) #define txtCols 6//txt文本列數(shù)struct fileData {vector<string> name;//第1列int data[txtRows][txtCols - 1];//保存txt文本的數(shù)據(jù)(第2列開始) };fileData loadFileData(char* path);int main() {fileData m_fileData = loadFileData(readDataPath);for (int i = 0; i < m_fileData.name.size(); i++){cout << m_fileData.name.at(i) << endl;}int data[txtRows][txtCols - 1];memcpy(data, m_fileData.data, sizeof(data));for (size_t row=0;row<txtRows;row++){for (size_t col = 0; col < txtCols - 1; col++){cout << data[row][col]<<",";}cout << endl;} }fileData loadFileData(char* path) {fileData m_fileData;char name[81];std::vector<string> v_name;int txtData[txtRows][txtCols - 1];int i, j;FILE* fp = fopen(path, "r"); //打開文件 if (fp == NULL){printf("文件讀取錯(cuò)誤...");return m_fileData;}for (i = 0; i < txtRows; i++){for (j = 0; j < txtCols; j++){if (j == 0){fscanf(fp, "%s", name);v_name.push_back(name);}else {fscanf(fp, "%d", &txtData[i][j - 1]);/*每次讀取一個(gè)數(shù),fscanf函數(shù)遇到空格或者換行結(jié)束*/}}fscanf(fp, "\n");}fclose(fp);memcpy(m_fileData.data, txtData, sizeof(m_fileData.data));m_fileData.name = v_name;return m_fileData; }

【4】C++將數(shù)據(jù)保存到txt文本中

#include "stdafx.h" #include <fstream> #include <string> #include "vector" #include <iostream> using namespace std;//txt文本保存的路徑 #define writeDataPath "D:\\imageName.txt" int main() {fstream fout(writeDataPath);//這里采用構(gòu)造方法,也可以使用open()方法vector<string> imageName;imageName.push_back("1.jpg");imageName.push_back("2.jpg");imageName.push_back("3.jpg");for (int i = 0; i < imageName.size(); i++){fout << imageName.at(i) << endl;}cout << "數(shù)據(jù)保存完畢..." << endl; }上面的是覆蓋保存方法,若想在原文末尾加上新數(shù)據(jù),只需要在fstream 的構(gòu)造方法或者open()的第二個(gè)參數(shù)傳入
ios::app即可,如:
fstream fout;fout.open(writeDataPath ?, ios::app);

下面給出一個(gè)函數(shù):

void writeDatatxt(string path, string data,bool bCover) {//fstream fout(path, ios::app);fstream fout;if (bCover){fout.open(path);//默認(rèn)是:ios_base::in | ios_base::out}else{fout.open(path, ios::app);//所有寫入附加在文件末尾}//fstream fout(path);fout << data << endl;fout.flush();fout.close(); }

總結(jié)

以上是生活随笔為你收集整理的C++读取txt数据为二维数组 将数据保存到txt文本中的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。