c# - 我怎样才能转动那个数量的字符串?
问题描述
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 // 。
解决方案
由于两个原因,我建议为此使用正则表达式。首先是当用户输入类似A12B7
or时会发生什么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上在线测试
推荐阅读
- jenkins - 当我已经安装了现有的 Jenkins 时将 Jenkins 安装为 Windows 服务?
- android - Cordova ionic 3 android app 实现没有验证码/ReCaptcha 的电话验证
- ios - Veracode CWE ID 311:加密问题
- amazon-web-services - 用于低性能线程安全数据存储的服务?
- sql - 数据层次分组清洗-雪花-sql
- python-3.x - 导出时的 datetime64[ns] 列在 Oracle DB 中显示为 DATE 数据类型
- python - 在 javascript 站点访问内部页面中使用 Selenium 进行 Webscraping
- python - vtkplotlib 在 QtFigure 中设置不透明度/透明度
- grafana - Grafana Loki 漂亮打印 json 日志
- deep-learning - AlexNet 8 层有多深?