2012-08-08 92 views
1

我正在寫一個簡單的算法,它應該寫在控制檯每次滿足某些條件。這裏是我的代碼:C# - 如何使用索引輸出字符串的一部分到控制檯

public static void StringTest() 
{ 
    string stringToUse = "Ala BalaB JiBBerish Ala Jibberish Ala BalaB"; 

    int strLength = stringToUse.Length; 
    int i = 0; 
    while(i < strLength-4) 
    { 
     if (stringToUse[i] == stringToUse[(i + 4)] && stringToUse[(i + 1)] == stringToUse[(i + 3)]) 
      System.Console.WriteLine(stringToUse[i] + stringToUse[(i + 1)] + stringToUse[(i + 2)] + stringToUse[(i + 3)] + stringToUse[(i + 4)]); 

     i++; 
    } 
} 

但不是一個字符串輸出爲數字434。我應該如何格式化輸出才能得到實際的字母,如果有人可以擴展我爲什麼我沒有得到一個錯誤,而這些數字呢?

回答

6

您正在添加字符 - 這會給你一個整數值。它看起來像你應該只使用字符串:

Console.WriteLine(stringToUse.Substring(i, 5)); 

或者你可以格式化字符:

Console.WriteLine("{0}{1}{2}{3}{4}", 
        stringToUse[i], 
        stringToUse[i + 1], 
        stringToUse[i + 2], 
        stringToUse[i + 3], 
        stringToUse[i + 4]); 

(注意去除多餘的括號,順便有時額外括號是有用的 - 在這裏他們只是分心。)

+0

謝謝我只是認爲索引可能會導致一些問題,所以我把額外的括號 – Leron 2012-08-08 17:04:58

+0

'WriteLine(char [] buff)'有很好的重載。連接字符比使用重載的方法更好? – user854301 2012-08-08 17:05:45

+0

@ user854301:那個過載沒有幫助 - 但是另一個會。將編輯... – 2012-08-08 17:20:38

0

stringToUse[i]char類型。您正在添加char值,因此數字。您想用stringToUse.Substring(i, 5)代替。

1
Console.WriteLine(stringToUse.substring(i, 5)); 
1

您可以使用string構造函數,如[]訪問你得到一個char一個string

if (stringToUse[i] == stringToUse[(i + 4)] && stringToUse[(i + 1)] == stringToUse[(i + 3)]) 
{ 
    //Construct string from the sequence of chars you want... 
    string result = new string(new char[]{stringToUse[i], 
            stringToUse[(i + 1)], 
             stringToUse[(i + 2)], 
              stringToUse[(i + 3)], 
               stringToUse[(i + 4)]}); 
    System.Console.WriteLine(result); 
} 
+1

你需要明確地使這個數組 - 'String(char [])'不使用params數組。 – 2012-08-08 17:53:25

+0

@JonSkeet:改正,thx。 – Tigran 2012-08-08 17:57:08

0
System.Console.WriteLine(new[] {stringToUse[i], stringToUse[(i + 1)],stringToUse[(i + 2)],stringToUse[(i + 3)],stringToUse[(i + 4)]}); 
+0

很好用'new []'也有幫助。謝謝 – Leron 2012-08-08 17:07:03

1

更改代碼以符合本:

public static void StringTest() 
{ 
    string stringToUse = "Ala BalaB JiBBerish Ala Jibberish Ala BalaB"; 

    for (int i = 0; i < stringToUse.Length - 4; ++i) 
    { 
     if (stringToUse[i] == stringToUse[(i + 4)] && 
      stringToUse[(i + 1)] == stringToUse[(i + 3)]) 
     { 
      Console.WriteLine(string.Join(string.Empty, 
       stringToUse[i], 
       stringToUse[i + 1], 
       stringToUse[i + 2], 
       stringToUse[i + 3], 
       stringToUse[i + 4])); 
     } 
    } 
} 

您應該使用for循環而不是帶有遞增變量的while循環。

+0

謝謝,爲什麼你認爲'for'循環更好? – Leron 2012-08-08 17:10:57

+0

當循環中有一個遞增/遞減變量時,使用'for'循環。如果你不這樣做,使用'while'循環。 – Dan 2012-08-08 17:13:56

+0

謝謝,我會牢記這一點 – Leron 2012-08-08 17:14:51

相關問題