Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
读取文件、跳转行并在数组中存储数据。 我对C++有点新的,而且我的程序有问题。我已经找了好几个小时、好几天了,尽管有很多类似的帖子,我还是不明白为什么我的程序不起作用_C++_Arrays_File_Text Parsing - Fatal编程技术网

读取文件、跳转行并在数组中存储数据。 我对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;