【问题标题】:Convert numeric string character to int32 [duplicate]将数字字符串字符转换为 int32 [重复]
【发布时间】:2014-11-15 20:40:51
【问题描述】:

如果我有一个数字字符串和int 变量a, b, c,并且我想将第一个数字分配给int a,将第二个数字分配给int b 等等,我该怎么做?这个 sn-p 说明了我的问题:

var str = "123";
int a = Convert.ToInt32(str[0]);
Console.WriteLine(str[0] + " " + a );

输出:

1 49

我该怎么做(除了从每次尝试转换中减去 48)?

编辑

今天我了解到str[0] 会生成Char,而不是string

【问题讨论】:

  • 你为什么不直接使用str而不是0处的索引?
  • 我想我不明白。又或许你不明白。我想要int a == 1int b == 2int c == 3
  • 旁注:“字符串”通常是指 C# 问题中的 string 类型,而在您的情况下,您所说的是 C# 中由 char 类型表示的“字符串的字符”。使用正确的词语可以帮助您找到解决方案(即使用比您接受的 C 样式解决方案更多的 C#/.Net 方法进行复制)或至少帮助其他人回答。
  • 谢谢。我不知道str[0]char。显然,如果我知道这一点,我就不会问这个问题。在询问之前我确实尝试过搜索...

标签: c#


【解决方案1】:
int a = str[0] - '0';
int b = str[1] - '0';
int c = str[2] - '0';

等等……

这是有效的,因为str[0]char'0' 也是如此,并且在 C# 中减去字符会得到 int

附注好吧,严格来说,减去chars 并不是得到int。没有为char 定义减法,但是字符可以隐式转换为int,所以会发生这种情况:两次隐式转换为int,并且显然可以将它们彼此相减以得到另一个int。子>

【讨论】:

  • +1 用于 C 风格的解决方案。对于.Net,请检查char to int。严格来说,这正是问题中的“除了从每次尝试的转换中减去 48 之外”......
  • 嗯...我认为 charint 的演员表是 C# 风格,我认为 parsing 是一个 single-character i> 在 C# 中编号既不是一个好主意,也不是更惯用的。
  • 归根结底,在我看来,这比int a = Char.GetNumericValue(str[0]);更优雅
【解决方案2】:

您正在使用Convert.ToInt32(char) 重载。试试ToString:

int a = Convert.ToInt32(str[0].ToString());

使用数学的另一种方式(我不太擅长)

string x = "123";
int number = int.Parse(x);
int first = number / 100;
int second = (number % 100) / 10;
int third = number % 10;

【讨论】:

  • 好的。看起来很笨重。没有更优雅的方式吗?谢谢
  • 第三种方式int b = Convert.ToInt32(str.Substring(1,1));
【解决方案3】:

以 Selman22 的回答为基础:

var str = "123";
int digit = GetDigit(str, 1);
Response.Write(digit.ToString()); // Prints '1'

int GetDigit(String s, Int32 digitPos)
{
  var actualDigitPos = (s.Length - digitPos) + 1;
  var number = Int32.Parse(s);

  return (number % (Int32)Math.Pow(10, actualDigitPos)) / (Int32)Math.Pow(10, actualDigitPos - 1);
}

请记住,您应该对字符串长度和 digitPos 以及有效字符串等添加某种验证。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    • 2016-09-06
    相关资源
    最近更新 更多