簡體   English   中英

C# 將字符串數組轉換為整數數組的問題

[英]C# Converting Problems with String Array to Int Array

我正在使用 C#,但在將字符串數組轉換為 int 數組時遇到問題。 首先我用控制台創建了一個字符串編號

Console.WriteLine("Geben Sie die Nummer ein:");
string wert = Console.ReadLine();

然后我將字符串轉換為數組

char[] wertarray = wert.ToCharArray();
wertarray1 = new string(wertarray);*

現在問題來了。 我想將字符串數組轉換為 int 數組,但例如對於字符串 wertarray1[0]=1,int 數組的值為 49。

int wertarray2 = Convert.ToInt16(wertarray1[0]);

正常的 Int 值應該是 1,但我不知道問題出在哪里。

我嘗試了此論壇中“將字符串數組轉換為 int 數組”的解決方案,但我仍然遇到 int 值得到一個奇怪數字的問題。

我期待着幫助。 謝謝 :-)。

Convert.ToInt16(Char)獲取Convert.ToInt16(Char)數值(即其Unicode 代碼點值)並返回該數字。 雖然您可能認為Convert.ToInt16('1')應該返回1 ,但考慮一下如果您嘗試Convert.ToInt16('@')會發生什么。

使用Int16.Parse (或TryParse )將字符串實際解析為數字。 當您使用單個字符來表示 0-9 時,您不妨使用簡單的算術來完成它,而無需調用任何Parse函數:

String line = Console.ReadLine();
List<Int16> numbers = new List<Int16>( line.Length );
foreach(Char c in line) {
    Int16 charValue = (Int16)c;
    if( charValue < 48 || charValue > 57 ) throw new Exception("char is not a digit");
    Int16 value = charValue - 48;
    numbers.Add( value );
}

您將獲得輸入流中字符的Unicode 代碼點值- 49 是字符1的 unicode 值。

如果要將數字的 unicode 字符轉換為該數字的數值,可以使用System.Globalization.CharUnicodeInfo.GetDecimalDigitValue(char c)

    var wertarray2 = wert.Select(c => (short)CharUnicodeInfo.GetDecimalDigitValue(c)).ToArray();

這處理所有數字(包括上標數字),而不僅僅是標准 ASCII 數字。

提供的答案已經解釋了您的問題並提供了解決方案。

通常,您可以將char轉換為string並將它們parse為整數(盡管不是最佳性能)。

如果你有所有的數字字符串

var numStr = "136";
var numbers = numStr.Select(n => int.Parse(n.ToString())).ToList(); // {1, 3, 6}

如果您的字符串也包含非數字

var mixStr = "1.k78Tj_n";
int temp;
var numbers2 = new List<int>();
mixStr.ToList().ForEach(n =>
{
    if (int.TryParse(n.ToString(), out temp))
        numbers2.Add(temp);
}); //{ 1, 7, 8 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM