Привет, я знаю, что это может быть немного глупо. Но мне нужно преобразовать мою строку в число, и, следовательно, мне нужно использовать char для циклического обхода операторов. Однако, если я попытаюсь сделать номер из двух или более цифр, номер будет разбит на одну цифру. Например.
string str="2+16-42X"
char[] ch=str.toCharArray();
Вывод приходит как (игнорировать запятые)
2,+,1,6,-,4,2,X
Я хочу получить 2,+,16,-42,X
Любое предложение о том, как обойти это? Спасибо
4 ответа
Вы можете написать простой лексер:
string str="2+16-42X";
StringBuilder currentNumber = new StringBuilder();
List<string> tokens = new List<string>();
foreach(char chr in str) {
if (Char.IsDigit(chr)) {
currentNumber.Append(chr);
}
else {
if (currentNumber.Length > 0) {
tokens.Add(currentNumber.ToString());
currentNumber.Clear();
}
if (chr == '-') {
currentNumber.Append(chr);
}
else {
tokens.Add(chr.ToString());
}
}
}
if (currentNumber.Length > 0) {
tokens.Add(currentNumber.ToString());
}
Список tokens
содержит ваши цифры и символы.
Вот подход RegEx
string str = "2+16-42X";
string[] result = Regex.Matches(str, "-?\\d+|[+/*X]")
.Cast<Match>().Select(x => x.Value).ToArray();
Объяснение:
-?
необязательный-
символ в начале\d+
одна или несколько цифр|
или[+/*X]
один из этих персонажей+
,/
,*
,X
https://dotnetfiddle.net/d2ZaGC
Вы можете попробовать использовать коды ниже:
string str = "2+16-42X";
str = str.Replace("+", " +");
str = str.Replace("-", " -");
str = str.Replace("X", " X");
var numbers = str.Split(' ');
foreach (var number in numbers)
{
Console.WriteLine(number);
}
Вывод:
2
+16
-42
X
Используйте RegEx:
string str="2+16-42X";
var match = Regex.Match(str, @"(\d+|\D)+");
match.Groups[1].Captures.Cast<Capture>().Select(c => c.Value).ToList();
Возвращает :
2 , + 16 , - , 42 , Х
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.