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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

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

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

? ??C++讀取txt數據為二維數組 保存txt文本數據

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

例子:

【1】C++讀取txt數據為二維數組

? ? ?imageData.txt文本的數據如下:

10.0 25 30 100 200 1000 1 2 31 2 3

? ? C++讀取imageData.txt文本的數據,并將數據轉存為二維數組的方法

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

? ?運行結果:


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

? ?imageName.txt文本的數據如下:

1.jpg 2.jpg 3.jpg

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

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

【3】txt文本復雜的情況

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

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

? ?這里把第1列的字符串保存在vector中,其余數據保存在二維數組data中,C++實現代碼如下:

#include <fstream> #include <string> #include "vector" #include <iostream> using namespace std;//txt文本的路徑 #define readDataPath "D:\\MyGitPro\\imageData\\data.txt" #define txtRows 3//txt文本行數 #define txtCols 6//txt文本列數struct fileData {vector<string> name;//第1列int data[txtRows][txtCols - 1];//保存txt文本的數據(第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("文件讀取錯誤...");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]);/*每次讀取一個數,fscanf函數遇到空格或者換行結束*/}}fscanf(fp, "\n");}fclose(fp);memcpy(m_fileData.data, txtData, sizeof(m_fileData.data));m_fileData.name = v_name;return m_fileData; }

【4】C++將數據保存到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);//這里采用構造方法,也可以使用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 << "數據保存完畢..." << endl; }上面的是覆蓋保存方法,若想在原文末尾加上新數據,只需要在fstream 的構造方法或者open()的第二個參數傳入
ios::app即可,如:
fstream fout;fout.open(writeDataPath ?, ios::app);

下面給出一個函數:

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

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。