2016-06-07 59 views
0

這是我迄今的程序。它編譯但在最後部分卡住並崩潰。我想重複用戶的字符串輸入並用「****」替換在字符串中找到的任何不好的單詞。很可能我的錯誤在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; 
    } 

    } 
} 

回答

0

非常感謝我的朋友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; 
     } 

    } 
    } 

} 
0

您有更多的工作要做,而不僅僅是帶問號的部分。即使您設法實施更換部件,您的代碼仍然無法工作。

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

find()搜索由前兩個參數,開始和結束迭代器值給出的序列。這些是你的bad_wordsfind()檢查第三個參數給出的值的第一次出現,並返回引用第一個找到的值的迭代器,如果未找到該值,則返回end()

因此,如果bad_words包含「Fudge」,並且您將「Fudge」鍵入say_backfind()將會找到它。

但是,如果您將「Definitely Fudge」鍵入say_backfind()當然不會找到它。因爲你的bad_words都沒有包含「絕對忽悠」,所以確切地說。 find()搜索完全匹配。

因此,如果您希望「替換在」say_back「字符串中找到的任何錯誤字詞,這將不起作用。

在開始考慮更換say_back中的任何bad_words之前,您需要弄清楚正確的算法。您需要在say_back中找到每個單詞,然後檢查bad_words中的每個單詞。

直到你能夠正確地實現搜索算法,搞清楚如何替換你在bad_words中發現的東西,從某種意義上說,就是把車放在馬前。

你需要先弄明白這一點;如果需要,你總是可以talk to your rubber duck

+0

fml。將編輯並重新發布。抱歉。一直在努力,沒有太多的睡眠,我的大腦受到傷害。迴應 – Ranfan

+0

需要一段時間來編輯,但我仍然處於困境 – Ranfan

+0

你有沒有跟你的橡皮鴨說話,但是,正如我建議的那樣? –

相關問題