我正在尝试从输入文件中的字符串创建指针向量。如果还没有指向向量中相同字符串的指针,我想添加指向向量中字符串的指针。如果字符串已经在向量中,我希望指针指向字符串的第一个实例。我有以下代码不起作用,我迷路了。
while(restaurant != stop)
{
string ratingstr = restaurant.substr(0, 3);
double rating = atof(ratingstr.c_str());
string restaurantonly = restaurant.substr(4);
// Searching the vector to see if the restaurant is already added
// if it is, point to the previous instance
for (int i = 0; i < restaurants.size(); i++)
{
if (restaurantonly.compare(restaurants[i]) != 0)
{
restaurantPointer.push_back(&restaurantonly);
}
else // find the resturant in the vector and point to that
{
for (int s = 0; s < i ; s++)
{
if (restaurants[s].compare(restaurantonly) == 0)
{
restPoint = &restaurants[s];
restaurantPointer.push_back(restPoint);
}
}
}
}
}
答案 0 :(得分:0)
如果您说的是真的(restaurants
是字符串指针的向量),那么以下问题:
if (restaurantonly.compare(restaurants[i]) != 0)
{
restaurantPointer.push_back(&restaurantonly);
}
您正在将字符串与if语句中的字符串指针进行比较。您else
中的相同优惠。
答案 1 :(得分:0)
令我困惑的是为什么学生会得到这些糟糕的作业。好的,忽略这个事实我会尝试给你一个答案:
restaurantPointer.push_back(&restaurantonly);
离开while块后,将调用 restaurtantonly
的析构函数。因此它的指针不再有效。
你应该使用指向更长寿命对象的指针,这似乎是restaurants
restaurantPointer.push_back(&restaurants[i]);
答案 2 :(得分:0)
存在一个主要错误:您试图在向量中放置一个指向while循环中的局部变量restaurantonly
的指针。所以这种方法无效。
您还尝试将std::string
类型的对象与a pointer to std::string
进行比较
在声明中
if (restaurantonly.compare(restaurants[i]) != 0)
如果您使用比较运算符而不是成员函数比较,那会更好。例如
if ( restaurantonly != *restaurants[i] )
{
//...
}