【问题标题】:Compare user input with values stored in vector将用户输入与存储在向量中的值进行比较
【发布时间】:2016-06-08 20:59:34
【问题描述】:

到目前为止,这是我的程序。它编译但在最后一部分卡住并崩溃。我想重复用户的字符串输入,并用“****”替换字符串中发现的任何坏词。我的错误很可能在 find_Poop_inSentence 中。 “调试断言失败。向量下标超出范围”

void find_Poop_inSentence(vector<string> & v1, vector<string> & v2, string sub);

int main()
{
cout << "Howdy partner, tell me some words you don't take kindly to.\n";
vector<string>bad_words;
string word;

while (cin >> word)
{
    cin.ignore();
    bad_words.push_back(word);
    if (word == "exit")
        break;

}
cout << "Ok partner, got it!\n";
cout << "Now say something and I'll repeat it back to you. Don't worry, I'll bleep out the words that you don't like.\n";

word = "";
vector<string> random_sentence; 
while (cin >> word)
{
    cin.ignore();
    random_sentence.push_back(word);
    if (cin.get() == '\n')
        break;

}

find_Poop_inSentence(bad_words, random_sentence, "****");

cout << "You said: ";
for (unsigned int i = 0; i < random_sentence.size(); ++i) {
    cout << ' ' << random_sentence[i];
}
system("Pause");
return 0;
}

void find_Poop_inSentence(vector<string> & v1, vector<string> & v2, string sub) {
int iterOne;
int iterTwo = 0;
int iteratorMax = v2.size();


for (iterOne = 0; iterOne < iteratorMax; iterTwo++) {

    if (v1[iterOne] == v2[iterTwo]) {
        v2[iterTwo] == sub;
    }
    if (iterTwo == iteratorMax ) {
        iterOne++;
        iterTwo = 0;
    }

  }
}

【问题讨论】:

    标签: c++ debugging vector user-input findandmodify


    【解决方案1】:

    除了带问号的部分,您还有更多工作要做。即使您设法实现了替换部分,您的代码仍然无法工作。

    find(bad_words.begin(), bad_words.end(), say_back) != bad_words.end())
    

    find() 搜索由前两个参数给出的序列,即开始和结束迭代器值。这些是您的bad_wordsfind() 检查由第三个参数给出的值是否第一次出现,并返回引用第一个找到的值的迭代器,如果没有找到该值,则返回 end()

    所以,如果 bad_words 包含“Fudge”,并且您在 say_back 中输入“Fudge”,find() 会找到它。

    但是,如果您在say_back 中输入“Definitely Fudge”,当然find() 将找不到它。因为你的bad_words 中没有一个包含“Definitely Fudge”,完全正确。 find() 搜索完全匹配。

    因此,如果您希望“替换在”say_back 字符串中发现的任何坏词,这将不起作用。

    在您开始考虑替换say_back 中的任何bad_words 之前,您需要找出正确的算法。您需要找到say_back 中的每个单词,然后检查bad_words 中的每个单词。

    在您能够正确实施搜索算法之前,弄清楚如何替换您在bad_words 中找到的内容,从某种意义上说,就是本末倒置。

    您需要先弄清楚这一点;如果需要,您可以随时talk to your rubber duck

    【讨论】:

    • fml.将编辑和重新发布。对不起。一直在做这个,没有太多睡眠,我的大脑受伤了。 ty 回复
    • 按照我的建议,你和你的橡皮鸭说话了吗?
    • 是的,鸭子开始顶嘴取笑我
    • 你的鸭子有没有问你为什么,在你的新循环中,每次你 get() 一个字符时,你 push_back() 整个字符串到 random_sentence 中,它总是空的并且永远不会改变?跨度>
    • 当我删除它时,它会将单词设置为“退出”并一遍又一遍地重复......我可怜我的大脑
    【解决方案2】:

    感谢我的朋友 Ivan Drago,我能够解决这个问题。

    void find_Poop_inSentence(vector<string> & v1, vector<string> & v2, string sub);
    
    int main()
    {
    cout << "Howdy partner, tell me some words you don't take kindly to.\n";
    vector<string>bad_words;
    string word;
    
    while (cin >> word)
    {
        //cin.ignore();
        bad_words.push_back(word);
        if (word == "exit")
            break;
    
    }
    cout << "Ok partner, got it!\n";
    cout << "Now say something and I'll repeat it back to you. Don't worry, I'll bleep out the words that you don't like.\n";
    cout << "Push enter twice when done.\n";
    
    word = "";
    vector<string> random_sentence;
    while (cin >> word)
    {
        //cin.ignore();
        random_sentence.push_back(word);
        if (cin.get() == '\n')
            break;
    
    }
    
    find_Poop_inSentence(bad_words, random_sentence, "****");
    
    cout << "You said: ";
    for (unsigned int i = 0; i < random_sentence.size(); ++i) {
        cout << ' ' << random_sentence[i];
    }
    system("Pause");
    return 0;
    }
    
    void find_Poop_inSentence(vector<string> & v1, vector<string> & v2, string sub) {
    
    for (unsigned int i = 0; i < v1.size(); i++) {
    
        for (unsigned int j = 0; j < v2.size(); j++) {
            if (v1[i] == v2[j]) {
                v2[j] = sub;
            }
    
        }
      }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-24
      • 1970-01-01
      • 1970-01-01
      • 2016-01-29
      • 2020-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多