读取文件、跳转行并在数组中存储数据。 我对C++有点新的,而且我的程序有问题。我已经找了好几个小时、好几天了,尽管有很多类似的帖子,我还是不明白为什么我的程序不起作用
我有一个这样包含数据的文件 串浮 字符串整数 串浮 字符串整型 浮动 浮动 所以前几行的第一列有字符串,其余的列有数字,在某些点上只有浮点数 我已经设法将数据存储到所有浮点开始的位置,但我不知道如何将数字的其余部分存储在数组中。(我知道使用向量会容易得多,但我必须使用数组) 这就是我所做的读取文件、跳转行并在数组中存储数据。 我对C++有点新的,而且我的程序有问题。我已经找了好几个小时、好几天了,尽管有很多类似的帖子,我还是不明白为什么我的程序不起作用,c++,arrays,file,text-parsing,C++,Arrays,File,Text Parsing,我有一个这样包含数据的文件 串浮 字符串整数 串浮 字符串整型 浮动 浮动 所以前几行的第一列有字符串,其余的列有数字,在某些点上只有浮点数 我已经设法将数据存储到所有浮点开始的位置,但我不知道如何将数字的其余部分存储在数组中。(我知道使用向量会容易得多,但我必须使用数组) 这就是我所做的 void getData(string *ext, int size) { istringstream is(*ext); float val; is >> val; f
void getData(string *ext, int size)
{
istringstream is(*ext);
float val;
is >> val;
float *arrVal = new float[10]; // I dont know the size of the Array.
if(typeid(val) == typeid(float)) //IM NOT SURE ABOUT THIS AT ALL. I JUST DON'T KNOW HOW TO GET TO THE LINE WHERE THERE ARE NO STRINGS
{
arr[size] = atof(*ext.c_str());
} // I think this part is why it does not work.
int main()
{
ifstream File("t.txt");
string line;
int nLines(0);
float *arrayValues = new float[12];
if(!inFile)
{
cerr << "Cannot open file." << endl;
return -1;
}
else
{
while(getline(File, line))
{
getValues(&line, nLines);
getPoints(&line); //this function gets the values of the first lines.
++nLines;
}
}
system("pause");
return 0;
}
void getData(字符串*ext,int大小)
{
istringstream是(*ext);
浮动增值税;
is>>val;
float*arrVal=newfloat[10];//我不知道数组的大小。
if(typeid(val)==typeid(float))//我对此一点也不确定。我只是不知道如何到达没有字符串的行
{
arr[size]=atof(*ext.c_str());
}//我认为这是它不起作用的原因。
int main()
{
ifstream文件(“t.txt”);
弦线;
国际在线(0);
float*arrayValues=新的float[12];
如果(!infle)
{
cerr当你读取每个文件时,你会得到一个字符中的数据。所以,
-使用strtok标记空格读取的每一行。如果字符串之间有空格,则此逻辑不起作用。如果字符串只有一个单词,如“STRRING”或“FLOAT”,则此逻辑工作正常。如果字符串如“我是天才”,则此逻辑不起作用:
-如果条件简单,请验证每个标记。字符串以[a-z]或[a-z]开头。数字使用[0-9]。
-一旦有效。使用atoi、itoa或其他工具执行所需的转换。此框架将跳过文件中任何非浮点数的行
bool isFloat(string s)
{
bool result = true;
bool decimalSeen = false;
for(int i = 0; i < s.length(); ++i)
{
if(s[i] == '.')
{
if(!decimalSeen)
{
decimalSeen = true;
}
else
{
result = false;
break;
}
}
else if(s[i] >= '0' && s[i] <= '9')
{
continue;
}
else
{
result = false;
break;
}
}
return result;
}
int main()
{
ifstream File("t.txt");
string line;
if(!File.is_open())
{
cerr << "Cannot open file." << endl;
return -1;
}
else
{
while(getline(File, line))
{
if(isFloat(line))
{
float val = atof(line.c_str());
// Now add to array
}
}
}
system("pause");
return 0;
}
getPoints(&line)和getValues(&line,nLines)有什么区别是吗?关于错误你是对的。这不可编译。请发布一些可以编译的东西。你知道引用是什么吗?哦,getPoints应该是上面的getData,我刚刚更改了它的名称。getvalues得到第一行,以字符串开头的行。你有几个问题:1)解析文件和查找p花边从哪里开始,2)读取它们,3)将它们存储在一个数组中。最好一次解决一个问题,并寻求帮助。是的,这正是我需要做的。所以要解析文件,我使用getLine,对吗?我只是不知道如何跳行……我到处都找过了,我都找不到。当你说每个文件时,你可以这样做你指的是文件的每一行?那么你指的是主函数还是getData?是的,我指的是正在读取的文件的每一行。:)谢谢你指出这一点。从现在开始我会小心的。
int maxSize = 10;
float* a = new float[maxSize];
// use a until it is full then
float* b = new float[maxSize*2];
memcpy(b, a, sizeof(float)*maxSize);
maxSize *= 2;
float* temp = a;
// make a point to new array
a = b;
// free memory a was using before
delete[] temp;