2013-07-06 170 views
2

我的删除功能正在发挥作用。让我们说如果我添加“苹果”,“男孩”,“猫”到我的阵列。它按字母顺序排序。当我删除某些东西时,让我们说“男孩”,它可以很好地消除它。但是,如果我输入“布朗”,它会从我的列表中删除“猫”。如果它在列表中找不到,它会按字母顺序删除它下面的那个。如果我有上面提到的那些字符串,并且我输入了“狗”,则没有任何反应,因为“猫”在“狗”之前。有任何想法吗?删除功能无法正常工作

void StringList::remove(string s) 
{ 
    int loc = search(s, 0, numberOfStrings); 
    if(loc!=-1) 
    { 
     for(int i=loc; i<(numberOfStrings)-1; i++) 
     { 
      str[i] = str[i+1]; 
     } 
     numberOfStrings--;  
    } 
} 


int StringList::search(string s, int start, int end) 
{ 
    for(int i=start; i<=end; i++) 
    { 
     if(str[i]>=s) 
     { 
      return i; 
     } 
    } 
    return -1; 
} 
+0

你的意思是,它删除了一个字母*下一个*如果它找不到确切的单词? – feralin

回答

3

一对夫妇的问题,我看到:

StringList::search,行

if (str[i] >= s) 

应改为

if (str[i] == s) 

你想找到完全匹配,不第一个字典上“更大”的字符串,对吗?

接下来,在StringList::remove第一线应使用,而不是

numberOfStrings - 1 

只是

numberOfStrings 

如果numberOfStrings = 3,那么你想在指数0, 1, 2,不0, 1, 2, 3搜索。

然而,不是在第一线改变参数,你也可以改变(在功能StringList::search)行

for (int i = start; i <= end; i++) 

for (int i = start; i < end; i++) 

有了这些补丁,你的算法应该工作。

您将尝试删除“Brown”并删除“Cat”的原因是因为搜索方法中的词典“大于”操作。当你给它“布朗”,它会看到“猫”,并说,嘿! “猫”>“布朗”!让我们回到“猫”的索引!然后删除方法,将删除“猫”...

+0

如果我调整str [i]> = s,它不会按字母顺序添加它们。我只是在我的功能中尝试过。我必须使用顺序搜索来查找插入点,以按字母顺序将字符串添加到我的列表中。 –

+0

@ GiBiT09然后,您应该有单独的帮助函数,以便在插入时使用,而不是移除项目。删除项目时需要更改该行;否则你会遇到我在底部描述的问题。 – feralin

+0

谢谢,我现在开始工作了。 –