计算字符串中的数字(从0到9)

时间:2012-02-10 09:20:00

标签: c# count

我想计算0到9中有多少个数字在字符串中。尝试了一些代码,但它不起作用,每次都返回0。什么是错的,如何解决?如果你能告诉我如何使用srting.Count()方法。感谢。

// Attempt 1
string str = textBox1.Text;
int b = 0;
int n = 0;
foreach (char a in str)
{
    if ((b > 0) && (b < 9))
    {
        if ((char)b == a)
            n++;
    }
}
label1.Text = n;

// Attempt 2
string str = textBox1.Text;
int n = 0;
foreach (char a in str)
{
    int[] k = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    foreach (int b in k)
    {
        if (b == a)
            n += 1;
    }
}
label1.Text = n

9 个答案:

答案 0 :(得分:6)

使用string.count的一个例子:

int result = "1 2 2 5 2 4".Count(char.IsDigit);

答案 1 :(得分:4)

使用您当前的方法,您需要将每个字符a从字符代码转换为相应的整数。使用Int32.Parse()。在您的一次尝试中,您使用了(char)b强制转型,但所有这一切都是为了给出一个字符代码为b的字符。

像这样编写测试会更容易

foreach (char a in str)
    if ((a>='0') && (a<='9'))
        ....

这里我使用的是字符文字'0'的语法,而不是"0",这是一个字符串文字。

答案 2 :(得分:4)

int n=0;
foreach (char a in str)
{
    if (a >= '0' && a <= '9')
          n++;
}

请使用此。
说明: ASCII字符0的代码为48,字符9为57(here,您可以找到所有字符代码),当您在C#中比较字符时,它会比较它们的代码。
你可以写if (a >= 48 && a <= 57)),它也可以。希望它有所帮助。
修改 我看了你的评论。

for(int = 1; i < str.length-1; i++)
{
    if(Char.IsDigit(str[i])) &&
       !Char.IsDigit(str[i-1]) &&
       !Char.IsDigit(str[i+1]))
        n++;
}

在此之后你应该检查第一个和最后一个字符。就是这样。

答案 3 :(得分:4)

使用简单的正则表达式吗?

  var matches = System.Text.RegularExpressions.Regex.Matches("1 2 3 4 5 6 10 11 12", "(?<![0-9])[0-9](?![0-9])");
  Console.WriteLine(matches.Count);

输出6。这只会选取孤立的数字,而不是两个或多个数字部分的数字。

编辑:我以某种方式完全错过了问题标签'c#'并在python中写了我的原始答案。方便地,所需的实际正则表达式模式语法在python和c#中都是相同的。

答案 4 :(得分:2)

这应该可以帮到你

public int CountDigits(string text)
{
    return text.Cast<int>().Count(c => c >= 48 && c <= 57);
}

答案 5 :(得分:1)

在第一个示例中,条件if ((b > 0) && (b < 9))始终为false,因为b从零开始并且永远不会被修改。

答案 6 :(得分:0)

很难说出您的代码是如何排序的,但是,在第一个块中,您将b设置为0并且永远不会更改它。

这意味着((b > 0) && (b < 9))将始终为假。

我认为您应该检查a而不是b

您还会遇到字符 '0'整数 0不同的问题。

答案 7 :(得分:0)

string str = "429gfsj58347583jhfs094248324";

  for(j=0;j<=9;j++)
  {
     if (str.Contains(j.ToString()))
     {
       n++;
     }
   }

Response.Write(n.ToString());


Will return the numbers frequency
Answer: 20

If you want the count separatly please ask freely.

Regards,

Madan Tiwari

答案 8 :(得分:0)

我遇到了这个问题而且LINQ不可用。然而,将它移植到LINQ解决方案中的基本思想很容易。这是nonLINQ解决方案:

int formatLength = 0;
foreach(char maybeDigit in format) {
           //use a ternary expression since C# can't cast bool to int
           formatLength += Char.IsDigit(maybeDigit) ? 1 : 0;
}