首页 > 解决方案 > 我怎样才能转动那个数量的字符串?

问题描述

public static void Main(string[] args)
{
    Console.WriteLine("Enter string: ");
    string st= Console.ReadLine();
    Console.WriteLine(Alpha(st));
}
public static string Alpha(string str)
{
    int[] nums = new int[str.Length / 2]; // 4 5 2 
    string num = "";
    string nw = "";
    string harfler = " ";
    string[] harflerr = new string[str.Length / 2]; // A B C
     
    for(int i = 0; i < str.Length; i += 2)
    {
        harfler += str[i].ToString();
    }
    for(int i = 1; i < str.Length; i+=2)
    {
        num += str[i].ToString();
    }
    for(int i = 0; i < num.Length; i++)
    {
        nums[i] += num[i];
    }
    for(int i = 0; i < harflerr.Length; i++)
    {
        harflerr[i] += harfler[i];
    }
    for(int i = 0; i < harflerr.Length; i++)
    {
       for(int j = 0; j < nums[i]; j++)
        {
            nw += harflerr[i];
        }
    }

    return nw;
}

输出必须是这样的:

"A4B5C2" ➞ "AAAABBBBBCC"

"C2F1E5" ➞ "CCFEEEEE"

"T4S2V2" ➞ "TTTTSSVV"

"A1B2C3D4" ➞ "ABBCCCDDDD"

为什么 nums [i] // 例如在 nums [i] 部分返回多达 4 // 。

标签: c#arraysstring

解决方案


由于两个原因,我建议为此使用正则表达式。首先是当用户输入类似A12B7or时会发生什么A1BC4?您的方法将失败,因为您假设每个字母后面只有一个数字。第二个原因是纯粹的可读性。使用正则表达式过滤所有内容比手动逐个字符更容易。


所以首先像这样定义你的正则表达式:(?'pair'[A-Za-z]{1}\d{0,})

使用此表达式将检索后面有字母和可能数字的对。然后您可以遍历所有对并为每个对创建新字符串。

string result = "";
foreach(string pair in pairs)
{
    char character = pair[0];
    int length = 1;
    if (pair.Length > 1)
    {
        length = int.Parse(pair.Substring(1));
    }
    result += new String(character, length);
}
Console.WriteLine(result);

您可以在rextester上在线测试


推荐阅读