将C ++中的txt文件读取到字符串和浮点数

时间:2015-07-14 11:36:30

标签: c++ stream

我需要读一个* .txt文件。它包含单词和数字,它看起来像这样:

firstword:12,13.0secondword18.7thirdword2,3,89

我需要将单词提取为字符串,将数字提取为浮点数。我无法解决的主要问题是之前没有分隔符#34;单词" (否则我会使用getline)。

谢谢!

注意:单词不包含数字,例如,单词' num1'是不可能的。

1 个答案:

答案 0 :(得分:0)

enter image description here

使用text.txt时,通常需要分隔符,文件中没有分隔符。

通过使用标准c库中的函数,您可以逐个字符地执行此操作,而无需使用分隔符。它并不优雅。

这是从文本文件firstword:12,13.0secondword18.7thirdword2,3,89提取isalpha()中提取单词和双打的一种方法。

此解决方案使用功能extractedWords[]提取任何与字母相关的内容,并将其存储在数组isdigit()中。

对于双打,它使用atof()extractedDoubles[]提取任何相关数字,并将其存储在数组#include<string> #include<fstream> #include<iostream> #include <stdlib.h> using namespace std; char mainBuffer[1024]={' '}; size_t fsize ; string extractedWords[100]; double extractedDoubles[100]={0}; string buf2str(const char* buffer); void loadFileToBuffer(char *filename); void extractWords(); void extractFloats(); int main(){ loadFileToBuffer("text.txt" ); extractWords(); extractFloats(); cout<<"\n"; return 0; } string buf2str(const char* buffer){ return string(buffer); } void loadFileToBuffer(char *filename){ ifstream infile; infile.open(filename); infile.read(mainBuffer, sizeof mainBuffer); if (infile.eof()){ fsize = infile.gcount(); cout<<"fsize = "<<fsize<<" , data = " << mainBuffer <<" \n "; } else if (infile.fail()){ // some other error... } else{ // buf must be full, but the file is larger... } infile.close(); } void extractWords(){ char character; int i=0; int j=0; char shortBuffer[16]={' '}; int seek=0; cout<<"\n"; seek=0; i=0; j=0; while ( seek<=fsize ) { character=mainBuffer[seek]; if ( isalpha(character) ) { shortBuffer[i]=character; i++; } else{ shortBuffer[i]='\0'; if (strlen(shortBuffer)>2){ extractedWords[j]=buf2str(shortBuffer); i=0; j++; } } seek++; } for(int ii=0;ii<j;ii++) cout<<extractedWords[ii] <<"\n"; cout<<"\n"; } void extractFloats(){ char character; int i=0; int j=0; char shortBuffer[16]={' '}; double dValue=0; int seek=0; cout<<"\n"; seek=0; i=0; j=0; while ( seek<=fsize ) { character=mainBuffer[seek]; if ( isdigit(character) || character=='.' ){ shortBuffer[i]=character; i++; } else{ shortBuffer[i]='\0'; dValue=atof(shortBuffer); if (dValue != 0) { extractedDoubles[j]=dValue; j++; i=0; } } seek++; } for(int ii=0;ii<j;ii++) cout <<extractedDoubles[ii]<<"\n"; cout<<"\n"; } 中。

{{1}}