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

C# 计算字符串中的数字(从0到9),c#,count,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)

我想数一数字符串中有多少从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
//尝试1
string str=textBox1.Text;
int b=0;
int n=0;
foreach(str中的字符a)
{
如果((b>0)和&(b<9))
{
如果((字符)b==a)
n++;
}
}
标签1.Text=n;
//尝试2
string str=textBox1.Text;
int n=0;
foreach(str中的字符a)
{
int[]k={0,1,2,3,4,5,6,7,8,9};
foreach(int b in k)
{
如果(b==a)
n+=1;
}
}
label1.Text=n

在第一个示例中,条件
if((b>0)和(b<9))
始终为false,因为
b
从零开始,从未修改过。

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

这样编写测试会更容易

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

如果((a>='0')&(a很难判断代码的顺序,但是在第一个块中,您将
b
设置为0,并且从不更改它

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

我想你应该检查
a
而不是
b

您还将遇到一个问题,即字符
'0'
与整数
0
不同

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

在此之后,您应该检查第一个和最后一个字符。仅此而已。

使用string.count的示例:


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

使用简单的正则表达式

  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);
var matches=System.Text.RegularExpressions.Regex.matches(“12345610112”)(?这应该对您有所帮助

public int CountDigits(string text)
{
    return text.Cast<int>().Count(c => c >= 48 && c <= 57);
}
public int CountDigits(字符串文本)
{
返回text.Cast().Count(c=>c>=48&&c
string str=“429gfsj58347583jhfs094248324”;

对于(j=0;j我遇到了这个问题,LINQ不可用。但是,将其作为基本思想移植到LINQ解决方案中是很容易的。以下是非LINQ解决方案:

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;
}

通常认为,为家庭作业问题提供代码解决方案不是一种好的形式,尤其是在没有解释的情况下。我们在这个行业已经有足够多的愚蠢的小丑了:-)还有一件事,它从0到9计算字符数,所以当我写数字32或其他大于9的数字时,它也会计算…你想计算字符串中的数字字符还是像234或78235这样的数字?如果你想计算数字,你应该使用正则表达式。我只想计算0、1、2、3、4、5、6、7、8和9,等等h 21、34、56、234等等…你只需要使用[]操作符就可以得到这个字符。)我忘了它。它不起作用。我改变了:int b=1;如果((b>=0)和(&&(b<9));(当b=0)但是没有任何变化…
b
无论如何检查都是错误的-我认为其他几个答案现在解释了这一点并提供了一个有效的解决方案。+1我想知道什么时候有人会建议检查unicode类别!因为这是一个家庭作业问题,我认为解决方案应该得到更多的解释ount()方法作为单个字符的IEnumerable序列作用于字符串。“Char.IsDigit”方法是一个谓词,它可以有效地过滤掉任何非数字字符,这将为您留下数字字符的计数。值得注意的是,我们在这里使用的是LINQ和字符类型,而不是System.string非常感谢你解释这个方法,但我想说的是:只计算0,1,2,3,4,5,6,7,8和9,等等,比如21,34,56,234等等……在你的例子中,它也计算其他数字……你缺少的主要概念是数字零与符号
0
完全不同e用于表示该数字。字符串将包含字符符号
0
,而不是数字零的代码。(以此类推,数字1和符号
1
)我只想数到0、1、2、3、4、5、6、7、8和9,而不是更多,比如21、34、56、234等等……您的代码示例没有指出这一点。您需要更复杂的算法来解决该问题。因此,我尝试使用int[]k,但是…你能帮忙并给出代码吗?无论如何谢谢你的回答。也许,因为问题被标记为c,这个代码不能返回答案20,因为它只循环10次。它是计算字符串中有多少不同的数字,而不是字符串中的总数字。
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
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;
}