我想计算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
答案 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
。这只会选取孤立的数字,而不是两个或多个数字部分的数字。
答案 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;
}