Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从c结尾反转字符串2字符和2字符#_C#_.net_Algorithm - Fatal编程技术网

C# 如何从c结尾反转字符串2字符和2字符#

C# 如何从c结尾反转字符串2字符和2字符#,c#,.net,algorithm,C#,.net,Algorithm,示例字符串: A3148579 预期结果: 798514A3 我尝试了以下代码: public static string Reverse(string s) { char[] charArray = s.ToCharArray(); Array.Reverse(charArray); return new string(charArray); } 实际结果是9758413A 但是我想要798514A3 谢谢大家 使用Lambda表达式扩展数组类以包含

示例
字符串

A3148579

预期结果:

798514A3

我尝试了以下代码:

 public static string Reverse(string s)
 {
     char[] charArray = s.ToCharArray();

     Array.Reverse(charArray);

     return new string(charArray);
 }
实际结果是9758413A

但是我想要798514A3

谢谢大家

使用Lambda表达式扩展数组类以包含名为Split的新方法:

public static class MyArrayExtensions
{
    /// <summary>
    /// Splits an array into several smaller arrays.
    /// </summary>
    /// <typeparam name="T">The type of the array.</typeparam>
    /// <param name="array">The array to split.</param>
    /// <param name="size">The size of the smaller arrays.</param>
    /// <returns>An array containing smaller arrays.</returns>
    public static IEnumerable<IEnumerable<T>> Split<T>(this T[] array, int size)
    {
        for (var i = 0; i < (float)array.Length / size; i++)
        {
            yield return array.Skip(i * size).Take(size);
        }
    }
}
公共静态类MyArrayExtensions
{
/// 
///将阵列拆分为几个较小的阵列。
/// 
///数组的类型。
///要拆分的数组。
///较小阵列的大小。
///包含较小数组的数组。
公共静态IEnumerable拆分(此T[]数组,整数大小)
{
对于(变量i=0;i<(浮点)数组。长度/大小;i++)
{
收益返回数组。跳过(i*size)。获取(size);
}
}
}
测试新的数组类方法:

[TestMethod]
public void TestSplit2()
{
   string str = "A3148579";

    char[] array1 = new char[str.Length];

    for (int i = 0; i < array1.Length; i++)
    {
        array1[i] = i;
    }


    // Split into smaller arrays of maximal 2 elements
    IEnumerable<IEnumerable<int>> splited = array1.Split<int>(2);
    int j = 0;
    foreach (IEnumerable<int> s in splited){
        j++;
    }
    log.InfoFormat("Splitted in to {0} smaller arrays.", j);
}
[TestMethod]
公共void TestSplit2()
{
string str=“A3148579”;
char[]array1=新字符[str.Length];
for(int i=0;i
最后,您只需反转生成的数组(较小)。

您可以尝试下面的代码。这只是给您一个想法,您可以根据测试用例和需求进行更新。下面的代码适用于您刚才提到的输入。我没有考虑长度是否是奇数。你可以做你的研究和更新逻辑,这将帮助你学习和了解更多。
字符串输入=“A3148579”;
堆栈=新堆栈();
整数计数=0;
字符串输出=”;
对于(int i=0;i0)
{
输出+=stack.Pop().ToString();
}

您可以将初始字符串拆分为大小为2的块(例如,借助于
子字符串
);请注意,
tocharray()
返回
char
s,即
size=1
的块

让我们概括一下解决方案:现在我们有了
size

代码:

using System.Linq;

...

public static string Reverse(string s, int size = 2) {
  if (size < 1)
    throw new ArgumentOutOfRangeException(nameof(size));

  if (string.IsNullOrEmpty(s))
    return s;
  
  int n = s.Length / size + (s.Length % size == 0 ? 0 : 1);

  return string.Concat(Enumerable
    .Range(0, n)
    .Select(i => i < n - 1 ? s.Substring(i * size, size) : s.Substring(i * size))
    .Reverse());
}
Console.Write(Reverse("A3148579"));
798514A3
结果:

using System.Linq;

...

public static string Reverse(string s, int size = 2) {
  if (size < 1)
    throw new ArgumentOutOfRangeException(nameof(size));

  if (string.IsNullOrEmpty(s))
    return s;
  
  int n = s.Length / size + (s.Length % size == 0 ? 0 : 1);

  return string.Concat(Enumerable
    .Range(0, n)
    .Select(i => i < n - 1 ? s.Substring(i * size, size) : s.Substring(i * size))
    .Reverse());
}
Console.Write(Reverse("A3148579"));
798514A3

这回答了你的问题吗?