我有一个字符串。例如:
string a = "abcdef098403248";
我的目标是,知道字符串以数字结尾(否则会发生这样的事情:MessageBox.Show("String doesnt end in a number");
),我想读取字符串,从结尾开始到结束,并将值存储在另一个字串。
现在唯一的问题是,我只能存储在新的字符串数字中,当我读取string a
时,如果我发现一个不是数字的字符,我会从后到后计数,我会停止阅读和存储在新字符串中找到的先前数字。代码输出应该看起来像这样:
string a = "aBcdef3213BBBBB0913456";
//part were i read the string from back to end
string finalString = "0913456";
如你所见,我从左到右存储数字,但我想从右到左阅读它们。
我想要的另一个例子:
string a = "aaaaa3a224444";
// part were i read the string from back to end
string finalString = "224444";
或者:
string a = "3333333a224444";
// part were i read the string from back to end
string finalString = "224444";
无论如何,谢谢。
答案 0 :(得分:3)
Stack<char>
是你的朋友:
var stack = new Stack<char>();
foreach (var c in a.Reverse())
{
if (!char.IsDigit(c))
break;
stack.Push(c);
}
return new string(stack.ToArray());
答案 1 :(得分:0)
使用以下函数反转字符串。
以错误的方式抓住数字 - 将其旋转回来。
public static string Reverse( string s )
{
char[] charArray = s.ToCharArray();
Array.Reverse( charArray );
return new string( charArray );
}
答案 2 :(得分:0)
string str = "3333333a224444";
var reversedStr = str.Reverse();
string result= new String(reversedStr.TakeWhile(Char.IsDigit).ToArray());
答案 3 :(得分:0)
main = do
{catch (take_number) fix_error;}
where
take_number = do
{
take_number "Give me a number";
n <- readLn;
}
fix_error e = if Exception e then do
{
putStrLn "Invalid number! Try again";
main;
}
else ioError e
这个问题感觉很糟糕 - 但这是一种非常冗长的方式 解决你的问题。或者,您可以在c#中阅读正则表达式。
答案 4 :(得分:-1)
我想出了这个。不如别人优雅。它会将数字添加到字符串中,直到它再次遇到一个字母然后停止。
string name;
string[] Blacklist;
Blacklist = new string[10];
Blacklist[1] = "Example1";
Blacklist[2] = "Example2";
Blacklist[3] = "Example3";
Blacklist[4] = "Example4";
Blacklist[5] = "Example5";
Blacklist[6] = "Example6";
Blacklist[7] = "Example7";
Blacklist[8] = "Example8";
Blacklist[9] = "Example9";
Blacklist[10] = "Example10";
Console.WriteLine("Enter your name:");
name = Console.ReadLine();
if (name = Blacklist[])
^^