我有一个C ++编程问题,我要求从包含多个浮点数,单词和符号(例如# ! %
)的文件中读取。从这个文件中我只需要浮动并将其存储到一个数组中。
文本文件可能如下所示
11 hello 1.00 16.0 1.999
我知道如何打开文件;它只是抓住我正在努力的花车。
答案 0 :(得分:0)
您必须使用fscanf()
。阅读文档以获取有关如何使用它的信息。
答案 1 :(得分:0)
只要您不介意将整数作为浮点数处理,例如帖子中的11
,就可以使用以下策略。
以下代码中的某些内容应该有效。
std::string token;
std::ifstream is(filename); // Use the appropriate file name.
while ( is >> token )
{
std::istringstream str(is);
float f;
if ( str >> f )
{
// Extraction was successful.
// Check whether there is more data in the token.
// You don't want to treat 11.05abcd as a token that represents a
// float.
char c;
if ( str >> c )
{
// Ignore this token.
}
else
{
// Process the float.
}
}
}
答案 2 :(得分:0)
// reading a text file and storing only float values
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
int main () {
string line;
ifstream myfile ("example.txt");
std::vector<float> collection;
if (myfile.is_open())
{
while ( getline (myfile,line) )
{
if(checkIfFloatType(line))
{
collection.push_back(std::stof (line));
}
}
myfile.close();
}
else cout << "Unable to open file";
return 0;
}
bool checkIfFloatType( string str ) {
std::istringstream iss(str);
float f;
iss >> noskipws >> f;
return iss.eof() && !iss.fail();
}
答案 3 :(得分:0)
我使用ctype facet将除数字之外的所有内容分类为空格:
struct digits_only : std::ctype<char>
{
digits_only() : std::ctype<char>(get_table()) {}
static std::ctype_base::mask const* get_table()
{
static std::vector<std::ctype_base::mask>
rc(std::ctype<char>::table_size, std::ctype_base::space);
if (rc['0'] == std::ctype_base::space)
std::fill_n(&rc['0'], 9, std::ctype_base::mask());
return &rc[0];
}
};
然后使用该方面使用区域设置填充流,并只读取您的数字:
int main() {
std::istringstream input(R"(
11
hello
1.00
16.0
1.999)");
input.imbue(std::locale(std::locale(), new digits_only));
std::copy(std::istream_iterator<float>(input), std::istream_iterator<float>(),
std::ostream_iterator<float>(std::cout, "\t"));
}
结果:
11 1 16 1.999