Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
8 / 8 / 3
Регистрация: 26.03.2012
Сообщений: 362
1

Split. Разбить строку =3+4-5*(4+9)

24.07.2015, 18:33. Показов 1626. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как можно разбить строку =3+4-5*(4+9) в string[]?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.07.2015, 18:33
Ответы с готовыми решениями:

Как разбить строку через Split по переносам на новую строку?
У меня есть строка (string file), которая выглядит так, как на фото. Как её разбить по переносам на...

Разбить строку через Split
Доброго времени суток!Пытаюсь разбить строку через Split,а конкретнее выделить коэффициенты а b c...

Разбить строку методом Split
Добрый вечер. Имеется файл (0 ; 0) ( 2,5; 0) ( 0;1) ( ...

Разбить строку по делиметру, используя Split
Подскажите пожалуйста, как разбить строку по вхождению. Нужно разбить через Split() Делаю так: ...

18
870 / 720 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
24.07.2015, 18:35 2
sweet_dreams,
Что предполагается на выходе?
0
8 / 8 / 3
Регистрация: 26.03.2012
Сообщений: 362
24.07.2015, 18:39  [ТС] 3
для польской нотации нужно
C#
1
string[] tokens = expression.Split (' ');
так отлично разбивается, но нужно без пробелов

Добавлено через 1 минуту
а так все знаки съедает
char[] arr={'+', '-','*','/'};
string[] tokens = expression.Split (arr);
0
870 / 720 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
24.07.2015, 19:05 4
sweet_dreams,
Воспользуйтесь регуляркой
C#
1
\d+|[+-/*\(\)]
0
8 / 8 / 3
Регистрация: 26.03.2012
Сообщений: 362
24.07.2015, 19:38  [ТС] 5
можно детальней?
0
153 / 153 / 56
Регистрация: 20.12.2011
Сообщений: 1,614
24.07.2015, 20:56 6
Лучший ответ Сообщение было отмечено sweet_dreams как решение

Решение

sweet_dreams, возможно как-то так вам надо:
C#
1
2
3
4
5
6
7
8
9
10
static void Main(string[] args)
        {
            string str = "=3+4-5*(4+9)";
            string[] strArr = str.Select(c=>c.ToString()).ToArray();
            foreach (var s in strArr)
            {
                Console.WriteLine(s);
            }            
            Console.ReadKey();
        }
1
870 / 720 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
24.07.2015, 21:05 7
sweet_dreams,
C#
1
2
3
4
5
6
            string s = "=3+4-5*(454+90)";
 
            foreach (Match match in Regex.Matches(s, @"\d+|[+-/*\(\)]"))
            {
                Console.WriteLine(match);
            }
Art,
Если есть двузначные и более числа, не подойдет
0
153 / 153 / 56
Регистрация: 20.12.2011
Сообщений: 1,614
24.07.2015, 21:06 8
XRoy, ой, точно

извиняюсь, за неверное решение.
0
4 / 0 / 1
Регистрация: 24.07.2015
Сообщений: 5
24.07.2015, 23:14 9
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
static void Main()
        {
            string str = "=3+4-5*(4+9)";
            char[] a = str.ToCharArray();
            string[] mas = new string[a.Length];
            for (int i = 0; i < a.Length; i++)
            {
                mas[i] = a[i].ToString();
            }
            foreach (String s in mas)
                Console.Write(s + " ");
            
            Console.ReadKey();
        }
0
870 / 720 / 304
Регистрация: 15.04.2013
Сообщений: 2,047
Записей в блоге: 5
25.07.2015, 03:06 10
highflyer,
Сообщения не читай, быстрей пиши ответ?

Ваш код идентичен коду Art, и не решает проблему, если числа двузначные и более
0
4 / 3 / 2
Регистрация: 01.02.2013
Сообщений: 27
25.07.2015, 20:00 11
Конечно много if - но тебе ведь универсальность нужна
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
static void Main(string[] args)
        {
            string str = "=3+4-5*(454+90)";
            string digit = "";
            List<string> mass = new List<string>();
            for(int i=0;i<str.Length;i++)
            {
                if (Char.IsDigit(str[i]))
                {
                    digit += str[i]; 
                    
                }
                else 
                { 
                    
                    if (digit != "") { mass.Add(digit); digit = ""; }
                    mass.Add(str[i].ToString());
                }
 
            }
            string[] trueMass = mass.ToArray();
 
        }
0
edward_freedom
26.07.2015, 16:34
  #12

Не по теме:

А что, в первом сообщение было хоть слово о двухзначном числе? Задание было поставлено четко и ясно, разить такую то строку.

0
4 / 0 / 1
Регистрация: 24.07.2015
Сообщений: 5
27.07.2015, 08:46 13
А кто сказал что надо для двухзначных? Четко поставлен вопрос, на него такой же дан ответ.

Добавлено через 1 минуту
Цитата Сообщение от XRoy Посмотреть сообщение
Ваш код идентичен коду Art, и не решает проблему, если числа двузначные и более
А кто сказал что надо для двухзначных? Четко поставлен вопрос, на него такой же дан ответ. Мне показалось что это больше тебе надо, нежели заказчику
0
Кодогенератор
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
27.07.2015, 11:33 14
Цитата Сообщение от sweet_dreams Посмотреть сообщение
Как можно разбить строку =3+4-5*(4+9) в string[]?
вам надо разбить или посчитать?
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
27.07.2015, 18:13 15
Самый простой способ, искать оператор с наименьшим приоритетом, рекурсивно вызваться для левой и правой части строки, затем применить операцию к операндам.

Но он жрущий, конечно. Но рабочий.
0
52 / 48 / 23
Регистрация: 27.07.2015
Сообщений: 145
28.07.2015, 00:06 16
Как-то так, для многозначных чисел тоже можно дописать. Другой вопрос, зачем именно в string[]? Может, в int[] и выполнить арифметику?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
            string inputString = "=3+4-5*(4+9)";
            
            string[] outDigits = new string[inputString.Length];    //  цифры
            string[] outActions = new string[inputString.Length];   //  математические действия
 
            //  Счетчики
            int outDigitsCounter = 0;
            int outActionsCounter = 0;
 
            char[] buffChars = inputString.ToCharArray();
 
            for (int i = 0; i < buffChars.Length; i++)
            {
                if (char.IsDigit(buffChars[i]))
                {
                    outDigits[outDigitsCounter] = buffChars[i].ToString();
                    outDigitsCounter++;
                    
                }
                else
                {
                    outActions[outActionsCounter] = buffChars[i].ToString();
                    outActionsCounter++;
                }
            }
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
28.07.2015, 11:22 17
Zhavoronkov5, а приоритет будет как считаться
И 1/(2/3), и 1/2/3 у вас разложется на [1 2 3] [/ /], как потом определить, что было изначально?
0
52 / 48 / 23
Регистрация: 27.07.2015
Сообщений: 145
28.07.2015, 18:55 18
Psilon, автор просил разбить ему строку - строка разбита, критерий отделения цифр от знаков предложен.

Все, что Вы написали, сделать можно, критерий останется тем же. Полный код писать автору.

Добавлено через 6 часов 29 минут
Добрался до C#, дописал слегка код. Поддержка двузначных чисел

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
            string inputString = "=3+41-5*(4+9)";
 
            int[] outDigits = new int[inputString.Length];    //  цифры
            string[] outActions = new string[inputString.Length];   //  математические действия
 
            //  Счетчики
            int outDigitsCounter = 0;
            int outActionsCounter = 0;
            bool isNewDigit = true;
 
            char[] buffChars = inputString.ToCharArray();
 
            for (int i = 0; i < buffChars.Length; i++)
            {
                if (char.IsDigit(buffChars[i]))
                {
                    if (isNewDigit) outDigitsCounter++;
                    isNewDigit = false;
                    outDigits[outDigitsCounter] = outDigits[outDigitsCounter]*10 + (int)Char.GetNumericValue(buffChars[i]);
                }
                else
                {
                    outActions[outActionsCounter] = buffChars[i].ToString();
                    outActionsCounter++;
                    isNewDigit = true;
                }
            }
1
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
28.07.2015, 19:39 19
Zhavoronkov5,

C#
1
string inputString = "=310256126+51276131-55215125*(41999321+957325)";
0
28.07.2015, 19:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.07.2015, 19:39
Помогаю со студенческими работами здесь

Как разбить строку с помощью Split?
Здравствуйте, есть такой массив в тхт файле 4248 4 1 2 3 14 6624 4 1 2 3 17 5193 7 1 2 8 11 14...

Разбить строку на слова без использования Split
В чем суть: 1) Мы вводим предложение. 2) Затем нужно отсортировать его по пробелам и сделать так...

Возможно ли разбить строку на слова по разделителю без split
Доброго времени суток. Подскажите, есть ли аналоги функции Split? За ранее спасибо!

Разбить строку на подстроки методом Split без учета переноса строк
Здравствуйте. string arr1 =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru