C++ 使用fstream读取带有浮点数的向量
我有一个paramaters.txt文件,其中包含一些OpenGL代码的参数,我需要读取它并将它们放入矩阵中 parameters.txt:C++ 使用fstream读取带有浮点数的向量,c++,vector,fstream,C++,Vector,Fstream,我有一个paramaters.txt文件,其中包含一些OpenGL代码的参数,我需要读取它并将它们放入矩阵中 parameters.txt: [6.0,6.0,9.0,5.0,1.0,0.6,0.4] [3.0,1.0,3.0,6.0,1.0,0.4,0.6] 这里是我将.txt中的项转换为整数的代码(当我使用整数时) flstream: void selector() { int numberOfObjects = 0; char path[100];
[6.0,6.0,9.0,5.0,1.0,0.6,0.4]
[3.0,1.0,3.0,6.0,1.0,0.4,0.6]
这里是我将.txt中的项转换为整数的代码(当我使用整数时)
flstream:
void selector() {
int numberOfObjects = 0;
char path[100];
std::string my_list;
//std::vector<std::vector<int>> parameters;
std::cout << "Insira o Caminho Para As Especificações dos Solidos: "; //Insert the path to the especifications of the solids
std::cin.getline(path, sizeof(path));
std::cout << path;
std::ifstream arquivo(path);
std::string line;
std::string vectors;
if (arquivo.is_open()) {
while (getline(arquivo, line)) {
numberOfObjects ++;
std::cout << line << std::endl;
vectors.append(line);
}
arquivo.close();
}
parameters = matrix(vectors,numberOfObjects);
void选择器(){
int numberOfObjects=0;
字符路径[100];
std::string my_list;
//std::向量参数;
std::cout既然你不是在问问题,我只能假设你不知道如何从发布的文件中读取一行。使用下面的函数。它是这样工作的:
从文件中读取第一个字符。如果无法读取或字符不是'['
,则返回false–这不是有效行
虽然我们可以读取数字和字符,并且字符是逗号,但将数字添加到结果向量中
上次读取的数字后面的字符必须是']'
。如果不是,则返回false–这不是有效行
添加上次读取的编号(在']'
之前的编号)
返回true–该行有效
欢迎来到SO,祝你好运
bool get_线(istream&is,vector&v)
{
字符c;
如果(!(is>>c)| c!='[')
返回false;
双d;
而(is>>d&&is>>c&&c==',')
v、 推回(d);
如果(c!=']')
返回false;
v、 推回(d);
返回true;
}
int main()
{
ifstream是{“c:\\temp\\test.txt”};
如果(!is)
返回-1;
整数行数=0;
for(向量v;获取线(is,v);+线数)
/*...*/;
}
既然你不是在问问题,我只能假设你不知道如何从发布的文件中读取一行。使用下面的函数。它是这样工作的:
从文件中读取第一个字符。如果无法读取或字符不是'['
,则返回false–这不是有效行
虽然我们可以读取数字和字符,并且字符是逗号,但将数字添加到结果向量中
上次读取的数字后面的字符必须是']'
。如果不是,则返回false–这不是有效行
添加上次读取的编号(在']'
之前的编号)
返回true–该行有效
欢迎来到SO,祝你好运
bool get_线(istream&is,vector&v)
{
字符c;
如果(!(is>>c)| c!='[')
返回false;
双d;
而(is>>d&&is>>c&&c==',')
v、 推回(d);
如果(c!=']')
返回false;
v、 推回(d);
返回true;
}
int main()
{
ifstream是{“c:\\temp\\test.txt”};
如果(!is)
返回-1;
整数行数=0;
for(向量v;获取线(is,v);+线数)
/*...*/;
}
我们没有看到问题。我们没有看到问题。感谢你的回应,我在C++中是新的,我被这些IFSH打败了,你在我的大学工作中帮助了我,非常感谢。先生,谢谢你的回应,我在C++中很新,我被这些IFSH打败了,你在我的大学工作中帮助了我,非常感谢,先生。
std::vector<std::vector<int>> matrix(std::string vectors,int numberOfObjects){
int teste = std::stoi (vectors,nullptr,10);
int counter = 0;
int numbers = 0;
std::string chars = "[],";
for(char c: chars){vectors.erase(std::remove(vectors.begin(), vectors.end(),c),vectors.end());}
std::vector<char> v(vectors.length());
std::copy(vectors.begin(), vectors.end(),v.begin());
std::vector<int> convertedToInt;
for(const auto& c :vectors)
convertedToInt.push_back(c - 48);
std::vector<std::vector<int>> result;
result.resize(numberOfObjects);
for(int i = 0; i < numberOfObjects ; i++){
result[i].resize((convertedToInt.size()+1)/numberOfObjects);
}
for(int j = 0; j < convertedToInt.size(); j++){
if(numbers == vectors.size()/numberOfObjects) numbers = 0;
result[counter].at(numbers) = convertedToInt[j];
if(numbers < vectors.size()/numberOfObjects) numbers++;
if((j+1) % (vectors.size()/numberOfObjects) == 0) counter++;
}
return result;
}
bool get_line( istream& is, vector<double>& v )
{
char c;
if ( !(is >> c ) || c != '[' )
return false;
double d;
while ( is >> d && is >> c && c == ',' )
v.push_back( d );
if ( c != ']' )
return false;
v.push_back( d );
return true;
}
int main()
{
ifstream is{ "c:\\temp\\test.txt" };
if ( !is )
return -1;
int lines_count = 0;
for ( vector<double> v; get_line( is, v ); ++lines_count )
/*...*/;
}