2014-06-09 64 views
-5

美好的一天,我之前问过这个问题,但我并不特定于我的道歉。我正在使用图片框作为每个单元格进行一个简单的windForms国际象棋游戏。根据规则,如果单元格被敌方目标击中,国王就不能移动。为了实现这个规则,我使用了pictureBox.Tag属性并为它分配一个字符串。如果一件作品以它为目标,我使用pictureBox1.Tag += "D"D,如Danger。因此,如果两件作品定位它,Tag将变为"DD"。我的问题是 - 如何从我的字符串中删除一个'D'?我可以使用-=运营商或类似的东西吗?如何从字符串中删除一个字符?

+0

看看SubString方法。 – Transcendent

+1

你是否在这些字符串中保留了大量的元信息,还是仅仅是D?如果它只是D然后做一个=不是+ =。 – stonemetal

+0

我只是在学习编程,我在网上搜索,没有找到我需要的东西。如果我问一个明显的问题,请给我一些答案或至少一个答案的链接。 – user3552161

回答

0

我认为这将解决您的问题

public void Remove (PictureBox pb){ 
    if (pb.Tag.ToString().Length > 1) { 
     // Greater than 1 because we need to keep one D in case of DD, 
     String temp = pb.Tag.ToString(); 
     pb.Tag = temp.Substring(0, temp.Length - 2); 
    } 
    else 
     pb.Tag = "D"; 
     // Tag equals D because if there is only one D, it won't be deleted 
} 
1

假设:

string a = "ABCDEFG"; 

要删除的第一个 'd':

a = a.Remove(a.IndexOf('D'), 1); 

要删除所有“D的

a = new string(a.Where(c => c != 'D').ToArray()); 

虽然我会推荐看的面向对象的方法。然后你可以很容易地存储对象的实际西洋棋棋子的引用,因此很容易修改(不需要重新计算)。

+0

这不会删除所有的D吗?我会推荐'Distinct'。 – gunr2171

+0

@ gunr2171:你说得对,我更新了我的答案 - 增加了另一种方法。 – Neolisk

0

只需使用Replace法,用一个空字符串替换你的性格(字符串):

string s = "Daddy comes back"; 
s = s.Replace("D", string.Empty); // Replace ALL D' 
Console.WriteLine(s); 

或者,如果你已经知道的人物索引中删除,或者如果你需要删除单个字符,请考虑使用Substring方法。

s = s.Substring(i, i+1); // Remove the character at position i 

注意,一个C#string是不可改变的:在这两种情况下,将返回一个新的字符串实例。

+0

不会删除字符串中的所有'D'吗? – user3552161

+0

是的。使用子字符串只能删除给定位置上的特定字符,请参阅我的编辑 – quantdev

0

您可以使用正则表达式来指定要删除一个角色的只是一个实例:

Regex regex = new Regex(Regex.Escape("D")); 
string output = regex.Replace("ABCDDEFG", string.Empty, 1); 
+1

尽我们所知,我认为使用正则表达式对于此特定任务来说是一种矫枉过正。 – Neolisk

+1

只是希望它不会出现在性能敏感的代码 – quantdev

+0

我尊重你的评论球员,虽然在防守的情况下:@Neolisk,我想这是一个意见问题。我认为这与任何正则表达式操作一样简单,正如OP所说,他正在学习,这是一种简单的方法来引入一个有用的工具。 quantdev,我认为这里没有明显的性能问题,特别是考虑到OP描述的程序的性质。无论如何,两者都是公平的评论。 – PulseLab

1

虽然洁具的方式做自己”重新尝试去做,你真正想要做的是沟渠字符串处理,并使用其他的东西。例如,为这个平方元信息创建一个完整的类。像

public class SquareInfo 
{ 
    public int Danger; //the number of pieces that can move to this square. 
    //... Any other information about the square you want. 
} 

东西然后,你可以抢标签为:

var myInfo = (SquareInfo)myBox.Tag; 

if (myInfo.Danger > 2) 
{ 
//do something 
} 

等。