Привет, я знаю, что это может быть немного глупо. Но мне нужно преобразовать мою строку в число, и, следовательно, мне нужно использовать char для циклического обхода операторов. Однако, если я попытаюсь сделать номер из двух или более цифр, номер будет разбит на одну цифру. Например.

string str="2+16-42X"

char[] ch=str.toCharArray();

Вывод приходит как (игнорировать запятые)

2,+,1,6,-,4,2,X

Я хочу получить 2,+,16,-42,X Любое предложение о том, как обойти это? Спасибо

c#
1
Shahrier Parvez 21 Авг 2018 в 13:35

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 содержит ваши цифры и символы.

4
Sefe 21 Авг 2018 в 10:59

Вот подход 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

4
fubo 21 Авг 2018 в 12:30

Вы можете попробовать использовать коды ниже:

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
-3
L_J 21 Авг 2018 в 10:52

Используйте 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 , Х

-4
Teejay 21 Авг 2018 в 10:43
51946773