如何组合两个字符串并创建4个字符集,其中两个来自一个字符串,另两个来自另一个字符串?c#

如何组合两个字符串并创建4个字符集,其中两个来自一个字符串,另两个来自另一个字符串?c#,c#,string,C#,String,我被困在创建一个算法中,该算法从两个字符串创建4个字符集,从一个字符串创建两个字符集,从另一个字符串创建两个字符集。 例如: 字符串一:FIRSTNAME 字符串二:LASTNAME 我期望的结果是得到10组4字符,如:FILA、RSST、TNNA、AMME、EFLA等等,直到我们得到这样的10组合 这是我写的代码 using System; public class Program { public static void Main() { Console

我被困在创建一个算法中,该算法从两个字符串创建4个字符集,从一个字符串创建两个字符集,从另一个字符串创建两个字符集。 例如:

  • 字符串一:
    FIRSTNAME
  • 字符串二:
    LASTNAME
我期望的结果是得到
10
4
字符,如:
FILA、RSST、TNNA、AMME、EFLA
等等,直到我们得到这样的
10
组合

这是我写的代码

using System;

public class Program
{
    public static void Main()
    {
        Console.WriteLine("Name");
        string name = Console.ReadLine();
        Console.WriteLine("Lastname");

        string lastname = Console.ReadLine();

        int i;

        var nchars = name.ToCharArray();
        var pchars = lastname.ToCharArray();

        for (i = 0; i <= 10; i++){
            int ctr0;
            int ctr;
            int ctr2;

            for (ctr = 0, ctr2 = 1, ctr0 = 1; 
                 ctr < 10; 
                 ctr0++, ctr = ctr + 2, ctr2 = ctr2 + 2) {
              Console.WriteLine("{0}{1}{2}{3}{4}",
                  ctr0,
                  nchars[ctr],
                  nchars[ctr2],
                  pchars[ctr],
                  pchars[ctr2]);
            }
        }
    }
}
但是它在字符串结束时停止,而不是得到10个组合,我只得到
4
。。我能做什么?
我做错了吗?

试图纠正你的冷漠嗯,我认为这是你应该尝试的:

public class Program
{
    public static void Main(string[] args)
    {
        Console.WriteLine("Name");
        string name = "FIRSTNAME";
        Console.WriteLine("Lastname");
        string lastname = "LASTNAME";
        int i;
        var nchars = name.ToCharArray();
        var pchars = lastname.ToCharArray();
        var ncharsCount = nchars.Length;
        var pcharsCount = pchars.Length;
        //for (i=0;i<=10;i++){
            int ctr0;
            int ctr;
            int ctr2;
            for (ctr = 0, ctr2 = 1, ctr0=1; ctr0 < 10 ;ctr0++, ctr++,ctr2++){
                Console.WriteLine("{0}{1}{2}{3}{4}", ctr0,nchars[ctr%ncharsCount],nchars[ctr2%ncharsCount],pchars[ctr%pcharsCount],pchars[ctr2%pcharsCount]);
            }
        //}
    }
}
公共类程序
{
公共静态void Main(字符串[]args)
{
Console.WriteLine(“名称”);
string name=“FIRSTNAME”;
Console.WriteLine(“姓氏”);
字符串lastname=“lastname”;
int i;
var nchars=name.ToCharArray();
var pchars=lastname.ToCharArray();
var ncharscont=nchars.Length;
var pcharsCount=pchars.长度;
//对于(i=0;i让我们将初始问题分成几个简单的问题:

  • CircularSubstring
    ,例如,对于
    value=“12345”,index=4,length=3,我们得到
    “512”
  • MyGemerator
    生成
    “FILA”、“RSST”
  • 所需格式的最终输出
  • 代码:

    private static String CircularSubstring(string value, int index, int length) {
      StringBuilder sb = new StringBuilder(length);
    
      // + + value.Length) % value.Length - 
      // .Net can return negative remainder when we want it to be in [0..value.Length) 
      for (int i = 0; i < length; ++i)
        sb.Append(value[((index + value.Length + i) % value.Length + value.Length) % value.Length]);
    
      return sb.ToString();
    }
    
    private static IEnumerable<string> MyGenerator(string left, string right, int size) {
      for (int i = 0; ; i += size) 
        yield return CircularSubstring(left, i, size) + CircularSubstring(right, i, size);
    }
    
    1FILA
    2RSST
    3TNNA
    4AMME
    5EFLA
    6IRST
    7STNA
    8NAME
    9MELA
    10FIST
    
    Console.Write(string.Join(Environment.NewLine, MyGenerator("Stack", "Overflow", 3)
      .Take(12)
      .Select((item, index) => $"{index + 1,2}. {item}")
    ));
    
     1. StaOve
     2. ckSrfl
     3. tacowO
     4. kStver
     5. ackflo
     6. StawOv
     7. ckSerf
     8. taclow
     9. kStOve
    10. ackrfl
    11. StaowO
    12. ckSver
    
    结果:

    private static String CircularSubstring(string value, int index, int length) {
      StringBuilder sb = new StringBuilder(length);
    
      // + + value.Length) % value.Length - 
      // .Net can return negative remainder when we want it to be in [0..value.Length) 
      for (int i = 0; i < length; ++i)
        sb.Append(value[((index + value.Length + i) % value.Length + value.Length) % value.Length]);
    
      return sb.ToString();
    }
    
    private static IEnumerable<string> MyGenerator(string left, string right, int size) {
      for (int i = 0; ; i += size) 
        yield return CircularSubstring(left, i, size) + CircularSubstring(right, i, size);
    }
    
    1FILA
    2RSST
    3TNNA
    4AMME
    5EFLA
    6IRST
    7STNA
    8NAME
    9MELA
    10FIST
    
    Console.Write(string.Join(Environment.NewLine, MyGenerator("Stack", "Overflow", 3)
      .Take(12)
      .Select((item, index) => $"{index + 1,2}. {item}")
    ));
    
     1. StaOve
     2. ckSrfl
     3. tacowO
     4. kStver
     5. ackflo
     6. StawOv
     7. ckSerf
     8. taclow
     9. kStOve
    10. ackrfl
    11. StaowO
    12. ckSver
    
    更多演示:

    private static String CircularSubstring(string value, int index, int length) {
      StringBuilder sb = new StringBuilder(length);
    
      // + + value.Length) % value.Length - 
      // .Net can return negative remainder when we want it to be in [0..value.Length) 
      for (int i = 0; i < length; ++i)
        sb.Append(value[((index + value.Length + i) % value.Length + value.Length) % value.Length]);
    
      return sb.ToString();
    }
    
    private static IEnumerable<string> MyGenerator(string left, string right, int size) {
      for (int i = 0; ; i += size) 
        yield return CircularSubstring(left, i, size) + CircularSubstring(right, i, size);
    }
    
    1FILA
    2RSST
    3TNNA
    4AMME
    5EFLA
    6IRST
    7STNA
    8NAME
    9MELA
    10FIST
    
    Console.Write(string.Join(Environment.NewLine, MyGenerator("Stack", "Overflow", 3)
      .Take(12)
      .Select((item, index) => $"{index + 1,2}. {item}")
    ));
    
     1. StaOve
     2. ckSrfl
     3. tacowO
     4. kStver
     5. ackflo
     6. StawOv
     7. ckSerf
     8. taclow
     9. kStOve
    10. ackrfl
    11. StaowO
    12. ckSver
    
    结果:

    private static String CircularSubstring(string value, int index, int length) {
      StringBuilder sb = new StringBuilder(length);
    
      // + + value.Length) % value.Length - 
      // .Net can return negative remainder when we want it to be in [0..value.Length) 
      for (int i = 0; i < length; ++i)
        sb.Append(value[((index + value.Length + i) % value.Length + value.Length) % value.Length]);
    
      return sb.ToString();
    }
    
    private static IEnumerable<string> MyGenerator(string left, string right, int size) {
      for (int i = 0; ; i += size) 
        yield return CircularSubstring(left, i, size) + CircularSubstring(right, i, size);
    }
    
    1FILA
    2RSST
    3TNNA
    4AMME
    5EFLA
    6IRST
    7STNA
    8NAME
    9MELA
    10FIST
    
    Console.Write(string.Join(Environment.NewLine, MyGenerator("Stack", "Overflow", 3)
      .Take(12)
      .Select((item, index) => $"{index + 1,2}. {item}")
    ));
    
     1. StaOve
     2. ckSrfl
     3. tacowO
     4. kStver
     5. ackflo
     6. StawOv
     7. ckSerf
     8. taclow
     9. kStOve
    10. ackrfl
    11. StaowO
    12. ckSver
    

    或者加上一些数不清的爱

    public class Program
    {
        public static void Main(string[] args)
        {
            Console.WriteLine("Name");
            string name = Console.ReadLine();
            Console.WriteLine("Lastname");
            string lastname = Console.ReadLine();
    
            // set the number of required sets and size
            const int sets = 10;
            const int size = 2;
    
            // make both inputs long enough
            var input1 = string.Concat(Enumerable.Repeat(name, (Math.Abs((sets * size) / name.Length) + 1)));
            var input2 = string.Concat(Enumerable.Repeat(lastname, (Math.Abs((sets * size) / lastname.Length) + 1)));
    
            // enumerate the index so we can substring the inputs.    
            var results = Enumerable.Range(0, sets)
                .Select(x => $"{x + 1}{input1.Substring(x * size, size)}{input2.Substring(x * size, size)}");
    
            // optional write to console
            foreach(var result in results)
            {
                Console.WriteLine(result);
            }
        }
    }
    

    for
    循环中,您将
    ctr
    增加2,您的条件为
    ctr<10
    ,因此它只给出4个结果。您期望的10个结果是什么?我得到一个索引越界错误。我想您可能需要设置每个字符串的长度(FIRSTNAME=9,LASTNAME=8)。并在每个循环中检查您是否没有超过该长度。当您确实超过该长度时,您需要将ctr变量滚动到超出长度的字符串的开头。@OlivierRogier我期望的十个结果是FILA、RSST、TNNA、AMME、EFLA、IRST、STNA、NAME、MELA、FIST.Lovely。谢谢很多。这正是我所需要的。谢谢,非常有帮助,而且确实有效,但我希望保持它尽可能简单。接近,但输出不是预期的