C#我想知道如何在长类型数字(输入参数)的每个数字后加逗号分隔?
示例:InsertComma(12272358)应该返回“ 1,22,7,2,35,8”
答案 0 :(得分:0)
枚举Int数字的最简单方法是将其制成字符串。 然后,对于该字符串的每个元素,我们将其锁定,在这种情况下,我们需要将它们串联起来,这与前一个元素具有相同的提醒。除了第一个元素外,没有其他元素。
var input = 54721704;
var str = input.ToString();
var result = new List<string>();
for (int i = 0; i < str.Length; i++)
{
if (i == 0)
{
result.Add(str[i].ToString());
continue;
}
if (Char.GetNumericValue(str[i]) % 2 == Char.GetNumericValue(str[i - 1]) % 2)
{
result[result.Count() - 1] += str[i].ToString();
}
else
{
result.Add(str[i].ToString());
}
}
Console.WriteLine(string.Join(", ", result));
https://rextester.com/UML19116
您可以通过将结果存储在变量中来避免不必要地访问以前的元素转换和取模运算,从而改善这一点。
答案 1 :(得分:0)
转换为字符串然后循环。
string CovertNumber(int source) {
var result = new StringBuilder();
var src = source.ToString();
var wasEven = false;
for (var i =0; i < src.Length; i++) {
var digit = int.Parse(src[i].ToString());
var isEven = (digit % 2) == 0;
if (i > 0 && isEven != wasEven) {
result.Append(",");
}
result.Append(digit.ToString());
wasEven = isEven;
}
return result.ToString();
}
此代码将在负数上爆炸,因此您需要验证输入或使用Math.Abs忽略该符号。
答案 2 :(得分:0)
使用LINQ:
private static string InsertComma(long v)
{
var strArray = v.ToString().ToArray();
//compares current element to next one and insert separator if is needed
//last element is ignored due to preventing index exeption
var result = strArray.Take(strArray.Length-1)
.Select((x, index) => ((x % 2) == (strArray[index+1]%2)) ? x.ToString() :x+ ",");
return string.Join("", result)+strArray.Last() ;
}
使用For循环:
private static string InsertComma(long v)
{
var result = "";
var strArray = v.ToString().ToArray();
int i = 0;
for ( i = 0; i < strArray.Length-1; i++)
{
result += strArray[i];
//compares current element to next one and insert separator if is needed
if ((strArray[i]%2) != (strArray[i + 1] % 2))
result += ",";
}
return result + strArray[i];
}
使用:
Console.WriteLine(InsertComma(12272358));
输出:
1,22,7,2,35,8