在数组中找到最大的连接词

时间:2015-05-09 19:52:32

标签: c# concatenation

我是C#的新手,有人可以帮我理解为什么我的代码不起作用吗? 似乎变量word有问题需要返回,但我不明白。

public virtual bool concatOnly()
        {
            int tmp = 0;
            foreach (string word in words)
            {
                tmp += word.Length;
            }
            return (tmp <= word.Length);
        }

我也不太明白我需要做什么:

 public virtual void removeRepeat()
        {
            IEnumerator<string> iterator = words.GetEnumerator();
            string checkWord = null;
            while (iterator.MoveNext())
            {
                checkWord = iterator.Current;
                foreach (string tmpWord in words)
                {
                    if (tmpWord.Contains(checkWord) && checkWord.Length < tmpWord.Length)
                    {
                        iterator.Remove();
                        break;
                    }

                }
            }
        }

Here's my full code

1 个答案:

答案 0 :(得分:0)

更新3 为了修复第二个编译错误(请参阅更新2),您需要从列表中删除而不通过Iterator执行此操作,Iterator没有删除方法。一种方法是以下方法,它在迭代器遍历后保存索引以便删除。请注意,我以相反的顺序删除索引,以便先前删除时不会更改要删除的索引号。

public virtual void removeRepeat()
{
    IEnumerator<string> iterator = words.GetEnumerator();
    string checkWord = null;
    List<int> removeIndexes = new List<int>();

    int i = -1;
    while (iterator.MoveNext())
    {
        checkWord = iterator.Current;
        i++;
        foreach (string tmpWord in words)
        {
            if (tmpWord.Contains(checkWord) && checkWord.Length < tmpWord.Length)
            {
                removeIndexes.Add(i);
                break;
            }

        }
    }
    removeIndexes.Reverse();
    foreach(var index in removeIndexes) {
        words.RemoveAt(index);
    }
}

更新2

修复了第一个编译错误(参见下面的原始答案,现在可以正常工作),你的代码仍然给出了这个编译错误main.cs(90,38): error CS1061: Type System.Collections.Generic.IEnumerator&#39;不包含Remove' and no extension method移除&#39;的定义典型的 e`System.Collections.Generic.IEnumerator&#39;可以找到。

<强>更新

我已将原来的答案改为至少可以编译的内容。我所做的是将原始return (tmp <= word.Length);更改回使用word,这是类成员变量,而不是局部变量。

<强>原始

更改方法word中变量concatOnly()的名称:

public virtual bool concatOnly()
{
    int tmp = 0;
    foreach (string w in words)
    {
        tmp += w.Length;
    }
    return (tmp <= word.Length);
 }

这是因为您的ConcatWordconcatOnly是一个成员方法,已经有一个名为word的成员变量:internal string word;

仅供参考,以上显示您还需要发布ConcatWord类的完整代码。可以提供您提供的完整代码的链接,这可能会有所帮助,但重现错误所需的一切也需要在您的问题中出现在此处。