比较字符数组方法

Comparing char arrays method

我一直在玩 space 工程师,自从他们添加 in-game 编程以来,他们一直是史诗般的,我正在尝试制作一个 gps auto-pilot 导航脚本并且必须获得块位置按名称查找块,在其较大的字符串名称中查找较小的字符串。我写这个方法是为了在一个较大的字符串(块的名称)中找到一个小字符串(单词):

bool contains(string text, string wordInText)
{
    char[] chText = text.ToCharArray();
    char[] chWord = wordInText.ToCharArray();

    int index = 0;
    for(int i = 0 ; i < chText.Length - chWord.Length ; i++)    
        for(int j = 0; j < chWord.Length;j++,index++)
            if (chWord[0] == chText[i])
                index = i;
            else if (chWord[j] == chText[index]){}                
            else if (index == chWord.Length-1)
                return true;
            else break;

    return false; 
}

我做得对吗,我应该换一种更短的方式吗?

如果你只是想检查一个字符串是否包含另一个字符串,那么你可以使用string.Contains,字符串class已经提供了一堆字符串操作的方法

使用 .Contains() 很简单,其中 returns 一个布尔值。

text.Contains(wordInText);

如前所述,String class 已经有一个 Contains 方法可以满足您的需求。

也就是说,您的代码不起作用。我知道你打算用它做什么,但它就是行不通。在适当的开发环境中单步执行它会告诉您原因,但由于这更像是脚本的方式,因此可能不是一个选项。

所以...基本思路是遍历您正在搜索的字符串,查找与您搜索的字符串相匹配的字符串。您的外部 for 语句看起来不错,但您的内部语句有点混乱。

首先,您正在重复进行第一个字符检查。这很浪费,而且放错了地方。每次外循环迭代执行一次。

其次,当 wordInText 的第一个字符与 text 中索引 wordInText.Length 处的字符匹配时,您的退出条件将触发,这显然不是您想要的。

事实上,你们都被 index 变量绊倒了。它实际上没有用,所以我会完全放弃它。

这里有一段类似的代码应该可以工作。它仍然比库 String.Compare 方法慢得多,但希望它能向您展示如何实现同样的目标。

for (int i = 0; i <= chText.Length - chWord.Length; i++)
{
    if (chText[i] == chWord[0])
    {
        int j;
        for (j = 0; j < chWord.Length; j++)
        {
            if (chText[i + j] != chWord[j])
                break;
        }
        if (j == chWord.Length)
            return true;
    }
}
return false;