比较字符数组方法
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;
我一直在玩 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;