当前位置: 首页 > 编程笔记 >

C++中读写txt文件并分离字符的方法

华子航
2023-03-14
本文向大家介绍C++中读写txt文件并分离字符的方法,包括了C++中读写txt文件并分离字符的方法的使用技巧和注意事项,需要的朋友参考一下

在实际工程中,经常遇到需要读取txt文件,txt文件中存的是一些小数或者整型数据,在C++中,可以利用string类和ifstream库文件对txt进行的读取,不过读回的数据经常是以字符串的形式返回,一般是txt的一行为一个字符串返回。那么如何从字符串中分离出整数或者是小数就涉及到字符串的分割问题,下面就该问题进行总结。

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

需要读取的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;
}

执行结果如下:

注意:

(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;
}

执行的结果如下:

顺利地读取了每行数据并分离出了整型数据保存在了数组中。

注意:

(1)字符在系统中以其ASCII码存储,对于数字字符要得到其实际的值,必须减去‘0'字符的ASCII码,之后的ASCII码就与数字字符的数据一致。

(2)基本思想:当遇到一个字符是数据后,不停的循环读后面的字符,直到遇到不是数字字符为止。

2读取的txt中有小数的情况

读回的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文件并分离字符的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。

 类似资料:
  • 问题内容: 我打开 记事本 (Windows)并编写 并转到“ 另存为… ”“ someFile.txt”,并将“ 编码” 设置为 UTF-8 。 在Java中,我有 但是我得到问号和类似的“特殊”字符。为什么? 编辑: 我有此输入(.txt文件中的一行) 和这段代码 和 吐司 输出(用于那些谁不熟悉与Android,吐司只是一个显示弹出式屏幕,在它特定的文本法)的罚款。控制台显示“奇怪的字符”(

  • 本文向大家介绍c++读取和写入TXT文件的整理方法,包括了c++读取和写入TXT文件的整理方法的使用技巧和注意事项,需要的朋友参考一下 如下所示: 以上这篇c++读取和写入TXT文件的整理方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 问题内容: 我正在尝试将字典写到txt文件。然后使用键入键,以读取dict值。我感觉好像只想走一步,但现在已经找了一段时间。 我得到这个错误 我的代码: 问题答案: 您的代码 几乎正确 !没错,您只差一步。当您读入文件时,您将以字符串形式读取它;但是您想将字符串转换成字典。 您看到的错误消息是因为是字符串,而不是字典。 我首先写道,您可以只将字符串输入其中,但这不起作用!您需要做其他事情。 例 这

  • 本文向大家介绍C#逐行读取txt文件的方法,包括了C#逐行读取txt文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了c#逐行读取txt文件的方法,是C#程序设计中非常实用的技巧,分享给大家供大家参考。 具体方法如下: 希望本文所述对大家C#程序设计的学习有所帮助。

  • 本文向大家介绍python 读写txt文件 json文件的实现方法,包括了python 读写txt文件 json文件的实现方法的使用技巧和注意事项,需要的朋友参考一下 首先第一步,打开文件,有两个函数可供选择:open() 和  file() ①. f = open('file.txt',‘w')    ...  file.close()    ②. f = file('file.json','r

  • 我一直在互联网上寻找帮助,但我找不到,所以我求助于发帖。 我有一个txt文件,格式如下 1/2 0 1/6 6/11 1/6 2/10 我需要读取这些单独的分数,并输入分子和分母的函数称为BigFraction(num,denom)。 我调用读取器并将其作为字符串输出。然后,我在空格上进行拆分,以获得作为字符串的各个分数,并将它们输入到我的助手方法strToBF中,该方法在正斜杠上进行拆分,并输入