我一直在玩太空工程师,因为他们添加了游戏内编程,我正在尝试制作一个gps自动驾驶导航脚本,并且必须通过名称找到块位置寻找更大的字符串名称中的较小字符串。我写了这个方法来在一个更大的字符串(块的名称)中找到一个小字符串(word):
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;
}
我是否正确行事,我应该采用另一种更短的方式吗?
答案 0 :(得分:1)
使用返回bool的.Contains()很简单。
text.Contains(wordInText);
答案 1 :(得分:0)
如果您只是想检查字符串是否包含其他字符串,那么您可以使用string.Contains
,字符串类已经为字符串操作提供了一堆方法。
答案 2 :(得分:0)
如前所述,String
类已经有一个Contains
方法,可以为您提供所需的方法。
那就是说,你的代码不起作用。我可以看到你要去哪里,但它不会起作用。在适当的开发环境中单步执行它会告诉你原因,但是因为这更像是一个可能不是一个选项的脚本。
所以......基本的想法是遍历你正在搜索的字符串,寻找与你搜索的字符串匹配的内容。你的外for
语句看起来很好,但你的内部陈述有点混乱。
首先,你要反复进行第一次角色检查。这很浪费,而且放错了地方。每次迭代外循环一次。
其次,当wordInText
的第一个字符与wordInText.Length
中索引为text
的字符匹配时,您的退出条件将会触发,这显然不是您想要的。
事实上,你们都在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;