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

(0)

相关推荐

  • VC++在TXT文件指定位置追加内容的方法

    本文实例讲述了VC++操作文本文件的方法,实现在txt文件指定位置插入内容.对于VC++爱好者有一定的学习参考价值. 主要功能代码如下: void CGoToFileDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon

  • C++从txt文件中读取二维的数组方法

    此文章用来做笔记, 从MATLAB中保存的二维数组1500*2的数据到txt文件中,格式化保存方式如下: MATLAB代码: fid=fopen('data.txt','wt'); for i=1:1500 fprintf(fid,'%.3f\t%.3f\n',r(i,:)); end fclose(fid); 其中r是1500*2的矩阵 在C++中读取到程序中,使用文件流: #include<iostream> #include<fstream> #include<type

  • C++从一个文件夹中读出所有txt文件的方法示例

    前言 前段时间做项目需要读取一个文件夹里面所有的txt文件,查询资料后得到以下实现方法: 首先了解一下这个结构体 struct _finddata_t { unsigned attrib; time_t time_create; time_t time_access; time_t time_write; _fsize_t size; char name[260]; }; 其中各成员变量的含义如下: unsigned atrrib: 文件属性的存储位置.它存储一个unsigned单元,用于表示文

  • C++将txt文件内容保存到数组的方法

    代码如下: #include<iostream> #include<fstream> //必要头文件 using namespace std; int main() { int a[9][9]; fstream in("E://C//LQB_04data.txt"); //""中是txt文件路径,注意:路径要用//隔开 cin.rdbuf(in.rdbuf()); //将输入信息从控制台转向txt文件 for(int i=0;i<9;i

  • c++读取和写入TXT文件的整理方法

    如下所示: #include "stdafx.h" #include <iostream> //无论读写都要包含<fstream>头文件 #include <fstream> #include <iomanip> using namespace std; int main() { //ifstream从文件流向内存的ifstream表示文件输入流,意味着文件读操作 ifstream myfile("c://a.txt"

  • C++中进行txt文件读入和写入的方法示例

    前言 大家可能大部分写代码都是在devc或者 vs里面直接输入数据,这一般常见于简单算法和数据的处理,但是一旦处理大数据的话,几百万,几千万,上亿个数据手打似乎不能轻易实现的,那么这篇文章我们来搞懂C++环境下如何进行io流读取txt文件,其实我们需要一个简单的代码进行分析. 这里直接给出源码, 可以进行直接编译 #include <fstream> #include <iostream> using namespace std; int main() { int a[10]; i

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

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

  • 在python中pandas读文件,有中文字符的方法

    后面要加encoding='gbk' import pandas as pd datt=pd.read_csv('D:\python_prj_1\data_1.txt',encoding='gbk') print(datt) 以上这篇在python中pandas读文件,有中文字符的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • C#中文件名或文件路径非法字符判断方法

    文件路径或者保存模板出现非法字符判断 1)不为空判断 string strTemplateName = txtTemplateName.Text; if (string.IsNullOrWhiteSpace(strTemplateName)) { Show("请输入模板名称!", "提示", .Information, OK); txtTemplateName.Focus(); return; } 2)然后对strTemplateName 进行非法字符判断 if (

  • python 读写txt文件 json文件的实现方法

    首先第一步,打开文件,有两个函数可供选择:open() 和  file() ①. f = open('file.txt','w')    ...  file.close() ②. f = file('file.json','r')    ... file.close()#记得打开文件时最后不要忘记关闭! open() 和 file() 都是Python的内建函数,返回一个文件对象,具有相同的功能,可以任意替换.使用语法为: f = open(fileName, access_mode='r',

  • Android编程实现读取工程中的txt文件功能

    本文实例讲述了Android编程实现读取工程中的txt文件功能.分享给大家供大家参考,具体如下: 1. 众所周知,Android的res文件夹是用来存储资源的,可以在res文件夹下建立一个raw文件夹,放置在raw文件夹下的内容会被原样打包,而不会被编译成二进制文件,并且可以通过R文件进行很方便地访问. 比如我们可以将更新信息.版权信息等放到txt文件中,然后放到raw文件中,然后很方便地进行访问. 在raw中放入一个a.txt文件,然后就可以在Activity中使用getResources()

  • C#简单读写txt文件的方法

    本文实例讲述了C#简单读写txt文件的方法.分享给大家供大家参考,具体如下: //write txt StringBuilder builder = new StringBuilder(); FileStream fs = new FileStream(saveFileName, FileMode.Create); StreamWriter sw = new StreamWriter(fs, Encoding.Default); for (int i = 0; i < ds.Tables[0].

  • 详解在.net中读写config文件的各种方法

    今天谈谈在.net中读写config文件的各种方法. 在这篇博客中,我将介绍各种配置文件的读写操作. 由于内容较为直观,因此没有过多的空道理,只有实实在在的演示代码, 目的只为了再现实战开发中的各种场景.希望大家能喜欢. 通常,我们在.NET开发过程中,会接触二种类型的配置文件:config文件,xml文件. 今天的博客示例也将介绍这二大类的配置文件的各类操作. 在config文件中,我将主要演示如何创建自己的自定义的配置节点,而不是介绍如何使用appSetting . 请明:本文所说的conf

  • 浅谈Python批处理文件夹中的txt文件

    1 文件处理形式  近期由于处理大量数据,所以对于采用python进行处理文件的一些操作也打算整理一下:接下来主要说一下如何处理目录下的一系列txt文件.首先看一下我们将要处理目录下的15个类似的数据文件,其中提取的数据如图所示,以及在读写文件时所需要的关键词,可以让程序正确读写相应的数据 2.代码段-python 接下来就是贴出相应的python代码,具体一些关键的注释我已经标注好了,具体数据结果就不展示了,如果大家想拿我的数据进行测试联系我就好,但是一般情况下在我标注的地方进行相应的修改就好

  • Android编程中读写私有文件的方法

    本文实例讲述了Android编程中读写私有文件的方法.分享给大家供大家参考,具体如下: 所谓私有文件,则是指程序自己能读取,而其它程序没有权限访问的文件,此文件保存在Data.app.程序包.file目录下面. 其中写文件的方法比较简单: private void writeFile(String fileName, String info) { try { FileOutputStream fout = openFileOutput(fileName, MODE_PRIVATE); byte[

随机推荐