2012-03-14 70 views
-3

我有一個函數,它接受一個字符串並返回一個字符串。在這裏面,我的字符串轉換成整數數組,稍後重乘以這樣每隔數:編程C#數組乘法

private string addEveryOther(string x) 
{  
    int[] d = x.Select(n => Convert.ToInt32(n)).ToArray(); 

    for(int i = 0; i < 10; i++) 
    { 
     d[i] = d[i] * 2; 
     MessageBox.Show(d[i].ToString()); //Display the result? 
     i++; 
    } 

    // And later returning a string: 
    StringBuilder g = new StringBuilder(); 
    foreach (int n in d) 
    { 
     g.Append(Convert.ToChar(n)); 
    } 

    return g.ToString(); 
} 

這適用於除,但不能與乘法,因爲它返回奇怪的值。如果我輸入「3434343434」,我希望它返回「6464646464」。現在它返回:「f4f4f4f4f4」,我不知道爲什麼?任何建議如何去做呢?

+2

乘法與您期望的相比會發生什麼? – 2012-03-14 09:17:34

+1

在for循環中,您正在頭部和塊內增加我的數量。這是故意的嗎? – 2012-03-14 09:21:52

+1

您希望在乘以**代碼**時獲得什麼? – Snowbear 2012-03-14 09:23:07

回答

0

基於上面的討論,我想你的方法應該使用ToString而不是Convert.ToChar。

private string addEveryOther(string x) 
{  
    int[] d = x.Select(n => Convert.ToInt32(n.ToString())).ToArray(); 

    for(int i = 0; i < d.Length; i += 2) 
    { 
    d[i] = d[i] * 2; 
    MessageBox.Show(d[i].ToString()); //Display the result? 
    } 

    // And later returning a string: 
    return String.Concat(d.Select(n => n.ToString())); 
} 

編輯:使用@基里爾的解決方案的毗連和@Reniuz評論中addEveryOther方法應該有希望解決的問題。

+0

謝謝,它更好但仍然返回「壞」值:「1004910049100491004910049」爲「2121212121」。爲什麼4翻譯爲100,1是49? – Tyrskaegg 2012-03-14 09:52:48

+0

Convert.ToInt32(n.ToString())作爲Reniuz建議的作品。 int [] d = x.Select(n => Convert.ToInt32(n.ToString()))。ToArray(); – Tyrskaegg 2012-03-14 10:05:19

+0

我已經根據上面的@Reniuz註釋修改了數組創建,這是否解決了這個問題? – 2012-03-14 10:05:39

0

正如我在評論中寫道Convert.ToInt32(char)

指定的Unicode字符的 等效的32位有符號整數的值轉換。

所以,當你轉換「0」的結果將是48,當「1」結果50等等。

這裏是改變的代碼:

private string addEveryOther(string x) 
{ 
    //1. Convert string to int, not char to int 
    int[] d = x.Select(n => Convert.ToInt32(n.ToString())).ToArray(); 

    //2. start from second number 
    for (int i = 1; i < 10; i++) 
    { 
     d[i] = d[i] * 2; 
     MessageBox.Show(d[i].ToString()); //Display the result? 
     i++; 
    } 
    string s = d.ToString(); 
    // And later returning a string: 
    StringBuilder g = new StringBuilder(); 
    foreach (int n in d) 
    { 
     //3. Convert int to string, not to char 
     g.Append(n.ToString()); 
    } 

    return g.ToString(); 
} 
0

試試這個:

int[] d = x.Select(n => int.Parse(n.ToString())).ToArray();  
    for(int i = 0; i < 10; i++)  
    {   
     d[i] = (i%2 == 0? d[i] * 2 : d[i]); 
    }  
    StringBuilder g = new StringBuilder();  
    foreach (int n in d)  
    {   
     g.Append(n);  
    }  
    return g.ToString(); 

希望它有助於

0

當您使用

Convert.ToInt32(n.ToString()) 

有冗餘的轉換。我認爲最簡單的方法是

var d = x.Select(n => Char.IsDigit(n) ? n - '0' : 0).ToArray();