-3

我不确定我会怎么做。我有一个数组,每行有几个值。例如,有一个“name”值、一个“id”值和一些其他值。我正在阅读另一个文本文件,它有一个数字,然后我想“找到”数组并对其进行编辑。我不确定我的解释是否正确,但比如说,新的文本文件说。

    2000 -1.6

然后我想找到 ID 值为 ' 的“数组” 2000'。假设Array[3](使用 Array 作为我的数组的示例名称)的 ID 值为2000. 我如何让程序“知道”Array[3]具有相同的价值?我想让它查找与文本文件中的行具有相同 ID 的行。

此外,有没有一种方法可以将其读取'-1.6'为 的整数1.6,但作为负数而无需特别指出?如果我的解释很奇怪,我很抱歉,但我想不出任何其他方式来表达它。

编辑:这是我现在拥有的代码。这只是程序中的一个问题,我不确定如何解决。函数“getdata2”是我要这样做的地方。我希望该函数读取每行有两个值的文本文件(我知道该怎么做);一个 4 位数字(ID)和一个像“-1.6”这样的数值。我想找到 ID 与 A/B/C.txt 文件中的 ID 匹配的数组行,并使用 A/B/C.txt 文件中的数值编辑其“权重”值。所以我想做的一个例子就是这个。我执行我的程序。第三行的 ID 值为“2000”,权重值为“52”。从 peeps.txt(函数 getdata 中使用的第一个文本文件)中读取所有行后,我将执行函数 getdata2,该函数将从 A/B/C.txt 读取数据。如果该文件中的第一行文本为“2000 -1.6”,我希望它“找到”数组中 ID 值为 2000 的部分(在本例中为 Person[3]),然后修改其权重值减去 1.6,将其更改为 50.4。但是,我不确定如何“找到”它。

#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;
struct person
{
string firstname;
int id;
double height;
double weight;
double bmi;
double change;
};
void getdata (person *array, person *ptr);
void printData (person *array, person *ptr);
void calculateBMI (person *array, person*ptr);
void getdata2 (person *array, person *ptr);
int main()
{
person array[13];
 person *ptr;
ptr = &array[0];
getdata(array, ptr);
calculateBMI(array, ptr);
printData(array, ptr);




}

void getdata (person *array, person *ptr)
{

ifstream inData;
inData.open("peeps.txt");
while(!inData.eof())
{
    for(ptr = &array[0]; ptr < &array[13];ptr++)
{
inData >> ptr->firstname >> ptr->id
>> ptr->height >> ptr->weight;

}
}
}
void printData (person *array, person *ptr)
{
cout << "Name" << "     ID" << "     Height"
<< "     Weight   " << "BMI" << endl;
for(ptr = &array[0]; ptr < &array[13];ptr++)
{
cout << ptr->firstname << "   "<< ptr->id
<< "   "<< ptr->height << "       "<< ptr->weight <<
"      "<< ptr->bmi << endl;
}
}
void calculateBMI (person *array, person*ptr)
{
for(ptr = &array[0]; ptr < &array[13];ptr++)
{
    ptr-> bmi = 703*(ptr->weight/((ptr->height)*(ptr->height)));
}
}
void getdata2 (person *array, person *ptr)
{
ifstream inData;
string filename;
int size;
cout << "Select from file 'A', 'B', or 'C'" << endl;
cin >> filename;
if (filename == "a" || filename == "A")
{
    inData.open("A.txt");
    cout << "Opening A.txt..." << endl;
    size = 17;
}
if (filename == "b" || filename == "B")
{
    inData.open("B.txt");
    cout << "Opening B.txt..." << endl;
    size = 9;
}
if (filename == "c" || filename == "C")
{
    inData.open("C.txt");
    cout << "Opening C.txt..." << endl;
    size = 12;
}
else
{
cout << "You have entered an incorrect filename." << endl;
}
while (size > 0)
{

    size--;
}


}
4

1 回答 1

0

如果与仿函数(在本例中为 isTarget)配对,std::find_if 会做你想做的事。

#include <iostream>
#include <algorithm>

struct X { int id; int val; };

class isTarget {
public:
    isTarget(int target): target_(target) {}
    bool operator() (X &item) { return item.id == target_; }
private:
    int target_;
};

int main()
{
    X x[] = { {1000, 1}, {2000, 2}, {3000, 3}, {4000, 4} };
    X* ele = std::find_if(x, x+4, isTarget(3000));  // this does the work
    std::cout << ele->val;

    return 0;
} 
于 2013-04-19T03:03:20.943 回答