C# C拆分20位数字,并将其分配给5个字符串变量

C# C拆分20位数字,并将其分配给5个字符串变量,c#,C#,我需要关于如何拆分20位数字(例如777722226661118888)并唯一分配给五个声明的整数变量(例如int n1、n2、n3、n4、n5)的指南 预期结果 int mynumber = 77772222666611118888; 并且,在分割和分配之后,将得到以下结果: n1=7777; n2=2222; n3=6666; n4=1111; n5=8888; 谢谢您应该先将myNumber转换为字符串, 然后使用substring函数提取该数字的每个部分 然后将这些字符串解析回所需的

我需要关于如何拆分20位数字(例如777722226661118888)并唯一分配给五个声明的整数变量(例如int n1、n2、n3、n4、n5)的指南

预期结果

int mynumber = 77772222666611118888;
并且,在分割和分配之后,将得到以下结果:

n1=7777;
n2=2222;
n3=6666;
n4=1111;
n5=8888;

谢谢

您应该先将myNumber转换为字符串, 然后使用substring函数提取该数字的每个部分 然后将这些字符串解析回所需的整数

您需要一个long或Decimal来存储初始数字,因为它对于int来说太长了

完成此操作后,使用模数获得反向数字,并使用除法去除使用的数字:

long tempNumber = number;
List<long> splitNumbers = new List<long>();

while (tempNumber > 0)
{
   long currentDigits = number % 10000;
   tempNumber = tempNumber / 10000; //Make sure this is integer division!

   //Store cuurentDigits off in your variables
   // 8888 would be the first number returned in this loop
   // then 1111 and so on
   splitNumbers.Add(currentDigits);
}

//We got the numbers backwards, so reverse the list
IEnumerable<long> finalNumberList = splitNumbers.Reverse();

您还可以将其转换为字符串,并使用.Take4和int.Parse获取您的数字。

您可以使用一个简单的正则表达式

string mynumber = "77772222666611118888";
var ns = Regex.Matches(mynumber, @"\d{4}").Cast<Match>()
              .Select(x => x.Value)
              .ToList();

如果需要使用单独的变量,可以执行以下操作:

        string mynumber = "77772222666611118888";
        string n1 = mynumber.Substring(0, 4);
        string n2 = mynumber.Substring(4, 4);
        string n3 = mynumber.Substring(8, 4);
        string n4 = mynumber.Substring(12, 4);
        string n5 = mynumber.Substring(16, 4);
        int stringSize = 4;
        string[] n = new string[mynumber.Length / stringSize];
        for (int i = 0; i < n.Length; i ++)
        {
            n[i] = mynumber.Substring(i*4, stringSize);
        }
如果您愿意使用阵列或其他集合,可以执行以下操作:

        string mynumber = "77772222666611118888";
        string n1 = mynumber.Substring(0, 4);
        string n2 = mynumber.Substring(4, 4);
        string n3 = mynumber.Substring(8, 4);
        string n4 = mynumber.Substring(12, 4);
        string n5 = mynumber.Substring(16, 4);
        int stringSize = 4;
        string[] n = new string[mynumber.Length / stringSize];
        for (int i = 0; i < n.Length; i ++)
        {
            n[i] = mynumber.Substring(i*4, stringSize);
        }

您尚未定义执行所问拆分的规则。您是否根据位置和长度进行拆分?您是否基于相同数字的运行进行拆分

假设您是基于相同数字的运行进行拆分,您可以使用这样的反向引用

\1表示,使用指定组的值,在本例中,使用以正则表达式中第一个左括号开始的组。它是这么说的

匹配任意数字,后跟 零个或多个完全相同的数字 因此,它将匹配序列,如1、22、333等。因此,您可以简单地说:

string   s     = "1223334444555556666667777777888888889999999990000000000" ;
string[] split = rxSameDigits.Matches(s).Cast<Match>().Select( x => x.Value ).ToArray() ;
并得到预期的结果

1. 22 333 4444 55555 666666 7777777 88888888 999999999 0000000000
你确定int可以存储那个数字吗?这个数字来自哪里?也许您应该将其视为一项文本处理任务。此数字不可能适合int类型。请使用string将其拆分,然后将结果解析回int类型。那么,新变量现在将如何获得其不同的4位数字?不是clear@Gentlesule如注释所示,它们包含在循环每次迭代的currentDigits中。命名变量在这里不是您的朋友,您可能需要将数字存储在数组或列表中。不管怎么说,编号变量都是一种代码味道,所以我觉得有一个与它们不兼容的解决方案并不糟糕。我更新了我的代码,使之更加完整。嗯。。。。正是我要找的。我真的很感谢你们所有人的努力。为了得到一个简单的字符串操作答案,前面的评论撤销了+1。出于好奇,这适用于19位或21位数字吗?@BradleyDotNET如果你问它是否会抛出异常,否。输出?19=>4+4+4+4 21=>4+4+4+4+4我只是想知道正则表达式是否能处理长度不能被4整除的字符串。从你的评论来看,我认为会的+1如果我能: