国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++中讀寫txt文件并分離字符的方法

2020-05-23 13:28:54
字體:
來源:轉載
供稿:網友

在實際工程中,經常遇到需要讀取txt文件,txt文件中存的是一些小數或者整型數據,在C++中,可以利用string類和ifstream庫文件對txt進行的讀取,不過讀回的數據經常是以字符串的形式返回,一般是txt的一行為一個字符串返回。那么如何從字符串中分離出整數或者是小數就涉及到字符串的分割問題,下面就該問題進行總結。

一、C++中txt文件的讀取

需要讀取的txt文件如下:

C++,讀寫,txt文件,分離字符

代碼如下:

#include<iostream>#include<string>#include<fstream>using namespace std;int main(){	string s;		//每次讀取一行txt文件返回的字符串	//讀取一txt文件	ifstream infile1;	infile1.open("1.txt");	while(getline(infile1, s))	{		cout << s << endl;	}	infile1.close();	//關閉文件	cin.get();	return 0;}

執行結果如下:

C++,讀寫,txt文件,分離字符

注意:

(1)函數getline是一行一行讀取txt文件,讀回的結果以字符串的形式存儲在s中,要讀回具體的數據必須對字符串進行分離。

(2)打開txt必須用到fstream庫中的ifstream類和其open和close成員函數。

(3)文件讀取后一定要記得關閉文件,即調用close函數

二、字符串的分離

1讀取的txt中只有整形的情況(要讀回的txt文件如上圖中所示)

代碼如下:

#include<iostream>#include<string>#include<fstream>using namespace std; //如果字符串中都是整數void stringTOnum1(string s, int* pdata){	bool temp=false;		//讀取一個數據標志位	int data=0;				//分離的一個數據	int m=0;				//數組索引值	for(int i=0;i<s.length();i++)	{		while((s[i]>='0')&&(s[i]<='9'))		//當前字符是數據,并一直讀后面的數據,只要遇到不是數字為止		{			temp=true;		//讀數據標志位置位			data*=10;			data+=(s[i]-'0');		//字符在系統以ASCII碼存儲,要得到其實際值必須減去‘0'的ASCII值			i++;		}		//剛讀取了數據		if(temp)		//判斷是否完全讀取一個數據		{			pdata[m]=data;		//賦值			m++;			data=0;					temp=false;		//標志位復位		}	}}  int main(){	int* pdata =new int[5];	string s; 	//讀取第一個txt文件	ifstream infile1;	infile1.open("1.txt");	while(getline(infile1, s))	{		stringTOnum1(s, pdata);		for(int i=0;i<5;i++)			cout << pdata[i] << " ";		cout << endl;	}	infile1.close();	cin.get();	return 0;}

執行的結果如下:

C++,讀寫,txt文件,分離字符

順利地讀取了每行數據并分離出了整型數據保存在了數組中。

注意:

(1)字符在系統中以其ASCII碼存儲,對于數字字符要得到其實際的值,必須減去‘0'字符的ASCII碼,之后的ASCII碼就與數字字符的數據一致。

(2)基本思想:當遇到一個字符是數據后,不停的循環讀后面的字符,直到遇到不是數字字符為止。

2讀取的txt中有小數的情況

讀回的txt如下圖所示:

C++,讀寫,txt文件,分離字符

分離字符的函數如下:

//如果字符串中有小數void stringTOnum2(string s, double* pdata){	bool temp=false;	int ndata=0;		//整數部分	double	fdata=0;	//小數部分	int n=0;			//小數部分的位數	int m=0;	for(int i=0;i<s.length();i++)	{		while((s[i]>='0')&&(s[i]<='9')||(s[i]=='.'))		//當前字符是數據或者是小數點		{			temp=true;			if(s[i]=='.')		//遇到了小數點			{				//不停的讀取后面的小數				i++;		//小數后的下一位				while((s[i]>='0')&&(s[i]<='9'))				{					n--;					fdata += (pow(10, n)*(s[i]-'0'));					i++;				}			}			//沒有遇到小數點			else			{				ndata*=10;				ndata+=(s[i]-'0');				i++;			}		}		//剛讀取了數據		if(temp)		{			pdata[m]=ndata+fdata;			m++;			ndata=0;			fdata=0;			n=0;			temp=false;		}	}}

運行結果如下:

C++,讀寫,txt文件,分離字符

基本思想:在原先的基礎上不僅要判斷是否遇到了數字字符還需要判斷是都遇到了小數點‘.'字符,如果遇到小數點字符,將后面的數據循環讀取直到遇到不是數字字符為止。但是需要將其存為小數,有移位。

以上這篇C++中讀寫txt文件并分離字符的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 武定县| 乌兰浩特市| 永登县| 南乐县| 宾川县| 琼海市| 麦盖提县| 富源县| 得荣县| 安顺市| 从江县| 潼南县| 娱乐| 青龙| 玉门市| 信阳市| 利辛县| 密山市| 乡城县| 介休市| 宜君县| 昌图县| 绵竹市| 西乡县| 吴桥县| 横峰县| 珠海市| 华蓥市| 丹凤县| 张家界市| 田东县| 遂宁市| 德清县| 台东县| 贡嘎县| 甘南县| 黄冈市| 卢龙县| 大安市| 闽清县| 嘉鱼县|