[英]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.