真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

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

創(chuàng)新互聯(lián)建站是一家以網(wǎng)站建設(shè)公司、網(wǎng)頁(yè)設(shè)計(jì)、品牌設(shè)計(jì)、軟件運(yùn)維、成都網(wǎng)站推廣、小程序App開(kāi)發(fā)等移動(dòng)開(kāi)發(fā)為一體互聯(lián)網(wǎng)公司。已累計(jì)為展覽展示等眾行業(yè)中小客戶提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開(kāi)發(fā)服務(wù)。

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

需要讀取的txt文件如下:

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

代碼如下:

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

執(zhí)行結(jié)果如下:

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

注意:

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

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

(3)文件讀取后一定要記得關(guān)閉文件,即調(diào)用close函數(shù)

二、字符串的分離

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

代碼如下:

#include
#include
#include
using namespace std;
 
//如果字符串中都是整數(shù)
void stringTOnum1(string s, int* pdata)
{
	bool temp=false;		//讀取一個(gè)數(shù)據(jù)標(biāo)志位
	int data=0;				//分離的一個(gè)數(shù)據(jù)
	int m=0;				//數(shù)組索引值
	for(int i=0;i='0')&&(s[i]<='9'))		//當(dāng)前字符是數(shù)據(jù),并一直讀后面的數(shù)據(jù),只要遇到不是數(shù)字為止
		{
			temp=true;		//讀數(shù)據(jù)標(biāo)志位置位
			data*=10;
			data+=(s[i]-'0');		//字符在系統(tǒng)以ASCII碼存儲(chǔ),要得到其實(shí)際值必須減去‘0'的ASCII值
			i++;
		}
		//剛讀取了數(shù)據(jù)
		if(temp)		//判斷是否完全讀取一個(gè)數(shù)據(jù)
		{
			pdata[m]=data;		//賦值
			m++;
			data=0;		
			temp=false;		//標(biāo)志位復(fù)位
		}
	}
}
 
 
int main()
{
	int* pdata =new int[5];
	string s;
 
	//讀取第一個(gè)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;
}

執(zhí)行的結(jié)果如下:

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

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

注意:

(1)字符在系統(tǒng)中以其ASCII碼存儲(chǔ),對(duì)于數(shù)字字符要得到其實(shí)際的值,必須減去‘0'字符的ASCII碼,之后的ASCII碼就與數(shù)字字符的數(shù)據(jù)一致。

(2)基本思想:當(dāng)遇到一個(gè)字符是數(shù)據(jù)后,不停的循環(huán)讀后面的字符,直到遇到不是數(shù)字字符為止。

2讀取的txt中有小數(shù)的情況

讀回的txt如下圖所示:

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

分離字符的函數(shù)如下:

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

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

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

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

以上這篇C++中讀寫(xiě)txt文件并分離字符的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持創(chuàng)新互聯(lián)。


本文標(biāo)題:C++中讀寫(xiě)txt文件并分離字符的方法
鏈接URL:http://weahome.cn/article/gjoess.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部