这是使用C ++的原则和实践的练习。你应该用一个你不喜欢的词,并让它“ble”出来。我得到了运行的代码,但在此之前,我编写了下面的代码,它崩溃了。我对它崩溃的原因更感兴趣?是 if(words [i-1] == dislike)?如果是这样,为什么不检查底部是否会导致程序崩溃?这可能是一个简单的答案,但我很想知道。
#include <iostream>
#include "std_lib_facilities.h"
using namespace std;
int main()
{
vector<string> words;
string temp;
string dislike = "tuggo";
while(cin>>temp)
words.push_back(temp);
cout << "Number of words: " << words.size() << endl;
sort(words.begin(),words.end());
for(int i = 0; i<words.size(); ++i)
{
if(words[i-1]==dislike)
cout << "BEEP DONT SAY TUGGO WHOOPS I SAID TUGG--BEEP";
else if(i==0 || words[i-1]!=words[i])
cout << words[i] << endl;
}
keep_window_open();
}
答案 0 :(得分:1)
您正在访问words[i-1]
,但i
从零开始。您无法访问负面指数。
答案 1 :(得分:1)
问题是words[i-1]
您从i = 0
开始,所以第一次使用负索引是未定义的行为。
答案 2 :(得分:1)
if(words[i-1]==dislike)
在循环的第一次迭代中,它应该在这一行崩溃。
如果i = 0,并且您正在获取i-1的索引,则数组中不能有负索引。
答案 3 :(得分:1)
是,
for(int i = 0; i<words.size(); ++i)
{
if(words[i-1]==dislike)
cout << "BEEP DONT SAY TUGGO WHOOPS I SAID TUGG--BEEP";
else if(i==0 || words[i-1]!=words[i])
cout << words[i] << endl;
}
此处,当迭代开始时,i
为0
,因此它将获取words[-1]
,这是无效的。