gpt4 book ai didi

c++ - 遍历字符串 vector ,从控制台获取输入,给出段错误

转载 作者:太空宇宙 更新时间:2023-11-04 13:22:26 25 4
gpt4 key购买 nike

我这里有两个不同的程序,它们都创建一个字符串 BST,然后检查 BST 中是否存在给定的字符串。

当我将字符串 vector 迭代器的取消引用传递给查找函数时,第一个程序运行良好。

但是当我从用户那里获取输入然后将迭代器的取消引用传递给该输入字符串的 vector 时,第二个程序失败并给出段错误。

为什么当我从用户那里得到输入时它会失败?

工作计划

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <set>
#include<typeinfo>
using namespace std;

int main()
{

vector<std::string> vn;
set<std::string> names;
BST<std::string> b2;

vn.push_back("AAA");
vn.push_back("BBB");
vn.push_back("CCC");

vector<std::string>::iterator vit = vn.begin();
for(; vit != vn.end(); vit++)
{
b2.insert(*vit);
names.insert(*vit);
}

vit = vn.begin();
for(; vit != vn.end(); ++vit)
{
if(*(b2.find(*vit)) != *vit)
{
cout << "Incorrect return value when finding " << *vit;
return -1;
}
}
}

给出程序错误

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <set>
#include<typeinfo>
using namespace std;

int main()
{

vector<std::string> vn;
set<std::string> names;
std::string cur_str;
BST<std::string> b2;

vn.push_back("AAA");
vn.push_back("BBB");
vn.push_back("CCC");


vector<std::string>::iterator vit = vn.begin();
for(; vit != vn.end(); vit++)
{
b2.insert(*vit);
names.insert(*vit);
}

std::getline(std::cin, cur_str);
vector<std::string> vn2;
vn2.push_back(cur_str);
vector<std::string>::iterator vit2 = vn2.begin();

vit = vn.begin();
for(; vit != vn.end(); ++vit)
{
if(*(b2.find(*vit2)) != *vit) (gives segmentation fault in this line)
{
cout << "Incorrect return value when finding " << *vit << endl;
return -1;
}
}
}

查找函数

template<typename Data> (Declared at the beginning)
iterator find(const Data& item) const
{
BSTNode<Data> * currentNode = root;
while(NULL != currentNode)
{
if(item < currentNode->data)
{
currentNode = currentNode->left;
}
else if(currentNode->data < item)
{
currentNode = currentNode->right;
}
else
{
// item == currentNode->data
return iterator(currentNode);
}
}
return end();
}

最佳答案

     if(*(b2.find(*vit2)) != *vit) (gives segmentation fault in this line)

这错误地处理了 find 没有找到任何东西的情况。如果未找到该值,find 会返回一个指向容器末尾的迭代器,然后您将 * 应用于该容器。糟糕。

关于c++ - 遍历字符串 vector ,从控制台获取输入,给出段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34649106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com