2012-12-20 17 views
6

Tamam, bu dize Player.Character içinde bunun içinde "Average Man{[Attributes (Mind 10) (Body 10) (Soul 10)]}" var.C# Do-Döngü Bir dizeye karakter eklemiyor

Ve bu do-loop'u kurdum, böylece bu dize 1 karakterinden bir sefer geçiyor olmalı ve bu karakteri "[" her karakter eklerken başka bir dize ContainerName denetler. Buradaki şey ContainerName sadece "[" içinde var ve bunun "Average Man{" olmasını istiyorum.

Eğer bir kişi bunun nasıl gerçekleştiğini ve belki de benim baştan çıkarıcı zihnimin halledebileceği bir çözümün nedenini anlamanıza yardımcı olabilirse, ben çok güzel olurdum.

O ya, işte benim kodum. Ben Karakter farz ediyorum

int count = -1; 

string ContainerName = ""; 

//Finds Start of container 
do 
{ 
    count = count + 1; 
    ContainerName = ContainerName + Player.Character[count].ToString(); 
} while (Player.Character[count].ToString() != "[" && 
     Player.Character.Length - 1 > count); 

textBox1.Text = ContainerName; 
+7

, bu en iyi cevap olacağını Player.Charecter kullanılan soru kodunuzu yeniden kodlamaktır - Player.Character, ayrıştırmanız gereken bir dize değil, kendi başına bir sınıf olmalıdır. –

+0

Basit bir Split() daha kolay olmaz mıydı? – Chrono

+0

Oyuncu'nun sınıf olduğunu ve Karakterin içinde saklı olduğunu belirtmeliydim. –

cevap

1

Kodunuz çalışıyor (Ben sadece test). ContainerName değeri "Ortalama Adam {[". Player.Charecter muhtemelen doğru değere sahip değil. I = "Ortalama Man {[Nitelikler (Zihin 10) (Gövde 10) (Ruh 10)]}"

daha zarif bir çözüm Dürüst

TextBox1.Text = Player.Character.Substring(0, Player.Character.IndexOf('[')) 
+0

olarak değiştirildi. Gerçek soruya cevap verdiğiniz için teşekkür ederiz. Ayrıca çalıştığını gördüm. –

+0

Gerçekten de öyle, lol. Bunu söylediğimde farkettim ki dizgimi değiştiren gözden kaçan bir kod çizgim vardı. Hata. Bu sadece bir saatimi fark etti. –

+0

Çözümünüz daha iyi görünüyor ama ne yaptığını anlamak için yeterince şey bildiğimi söyleyemem. –

1

Player'ın bir dize özelliğidir ve bunu yoksa ilk [ tüm dize veya dize kadar istiyorum.

StringBuilder sb = new StringBuilder(); 
foreach (char c in Player.Character) 
{ 
    if (c == '[') 
     break; 
    sb.Append(c); 
} 
textBox1.Text = sb.ToString(); 

veya

var i = Player.Character.IndexOf('['); 
textBox1.Text = i >= 0 ? Player.Character.Substring(0, i) : Player.Character; 
+0

İkinci örnek çalışmıyor. '.Substring (int)' endeksinden sonra her şeyi döndürür bu yüzden '' Ortalama Man {[Öznitelikler '.Substring (12) == "[Öznitelikler" ', istedikleri yer" Ortalama Adam {"'. –

+0

Oops, gerçekten. 'Substring (0, i) ' – snurre

İlgili konular