Разабраць некалькі значэнняў з радка ў C #

Выкажам здагадку, што я напісаў «5 і 6" ці "5 + 6». Як я магу прызначыць 5 і 6 для двух розных зменных у C #?

пастскрыптум Я таксама хачу зрабіць пэўную працу, калі некаторыя сімвалы сустракаюцца ў радку. Выкажам здагадку, што я напісаў 5 + 5. Ці будзе гэты код рабіць?

 if(string.Contains("+"))
 {
     sum=x+y;
 }
0
Зрабіце для гэтага ўмовы. Як , калі (string.Contains ( "+") || string.Containts ( "плюс") || string.Contains ( "і") {...}
дададзена аўтар PiLHA, крыніца
Regex гэта шлях для вас: msdn.microsoft.com/es-es/library/…
дададзена аўтар Paulo Bu, крыніца
Пытанне даволі расплывісты. Што менавіта вашыя патрабаванні? Ці можа быць проста аб <�я> што-небудзь </я> паміж гэтымі лікамі? Ці можа быць больш за 2 колькасці? Любое мэтавае рашэнне будзе трэба больш інфармацыі, чым тое, што вы далі нам да гэтага часу.
дададзена аўтар John Willemse, крыніца
Так. амаль усе
дададзена аўтар Knight Fall, крыніца

8 адказы

string input="5+5";

var numbers = Regex.Matches(input, @"\d+")
                   .Cast()
                   .Select(m => m.Value)
                   .ToList();
8
дададзена
Succinct! Вельмі добра.
дададзена аўтар David, крыніца
Люблю гэта! <�Код> +1 ..
дададзена аўтар Soner Gönül, крыніца

Асабіста я б галасаваць супраць рабіць некаторыя расшчапленню і рэгулярныя выразы рэчаў.

Замест гэтага я б (і зрабіў у мінулым) выкарыстоўваць адзін з многіх Выраз ацэнкі бібліятэкі, як, напрыклад, гэты больш у Project Code (і у абноўленая версія больш у CodePlex ).

Выкарыстоўваючы сінтаксічны аналізатар/інструмент вышэй, вы маглі б зрабіць нешта накшталт:

enter image description here

Простае вылічэнне выразы, то можа выглядаць наступным чынам:

Expression e = new Expression("5 + 6");
Debug.Assert(11 == e.Evaluate());

Для мяне гэта значна больш памылак, чым доказ рабіць сінтаксічную усё сам, у тым ліку рэгулярных выразаў і таму падобныя.

2
дададзена

Нешта падобнае можа абыходлівы

string strMy = "5&6";
char[] arr = strMy.ToCharArray();
List list = new List();
foreach (char item in arr)
{
  int value;
  if (int.TryParse(item.ToString(), out value))
  {
    list.Add(item);
  }
}

спіс будзе змяшчае ўсе цэлыя значэння

1
дададзена

Калі вы хочаце, каб прызначыць нумары з радка ў зменных, вам прыйдзецца разабраць радок і зрабіць пераўтварэнне.

Просты прыклад, калі ў вас ёсць тэкст толькі з адным нумарам

string text = "500";
int num = int.Parse(text);

Цяпер, калі вы хочаце, каб разабраць нешта больш складанае, вы можаце выкарыстоўваць раскол() і/або рэгулярны выраз, каб атрымаць усе колькасці і аператар паміж імі. Чым вы проста перабіраць масіў і прысвоіць нумары зменных.

string text = "500+400";
if (text.Contains("+"))
{
 String[] data = text.Split("+");
 int a = int.Parse(data[0]);
 int b = int.Parse(data[1]);
 int res = a + b;
}

Асноўным, калі ў вас ёсць толькі 2 нумары і operazor паміж імі, яе добра. Калі вы хочаце зрабіць «калькулятар» вам трэба нешта больш, як бінарныя дрэвы або стэк.

0
дададзена

Выкарыстоўвайце рэгулярныя выразы, каб атрымаць гэтыя значэння, а затым перайсці на аперанд зрабіць разлік

        string str = "51 + 6";
        str = str.Replace(" ", "");
        Regex regex = new Regex(@"(?\d+)(?\+|and)(?\d+)");

        var match = regex.Match(str);
        int rightHand = int.Parse(match.Groups["rightHand"].Value);
        int leftHand = int.Parse(match.Groups["leftHand"].Value);
        string op = match.Groups["operand"].Value;

        switch (op)
        {
            case "+":
            .
            .

            .


        }
0
дададзена

You should use another name for your string than string

var numbers = yourString.Split("+");
var sum = Convert.ToInt32(numbers[0]) + Convert.ToInt32(numbers[1]);

Заўвага: То рэалізацыя без якіх-небудзь праверак памылак або апрацовак памылак ...

0
дададзена

Выкарыстоўвайце метад String.split. Ён разбівае радок ром дадзены знак і вяртае масіў радкоў, які змяшчае значэнне, якое разбіваецца на некалькі частак, у залежнасці ад характару ламацца, у гэтым выпадку, яго «+».

        int x = 0;
        int y = 0;
        int z = 0;

        string value = "5+6";
        if (value.Contains("+"))
        {
            string[] returnedArray = value.Split('+');
            x = Convert.ToInt32(returnedArray[0]);
            y = Convert.ToInt32(returnedArray[1]);
            z = x + y;
        }
0
дададзена