Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 22.11.2016
Сообщений: 8
1

Обработка строки

22.11.2016, 21:50. Показов 1139. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, такая вот задача, нужно чтобы в созданном диалоговом окне обрабатывалась строка 2 способами: 1. Получить массив результатов возведения в квадрат цифровых слов; 2. Сформировать новую строку, в которую включены слова, состоящие только из латинских букв и не содержащие букв q, r и u. С первым условием проблем не возникло, проблема во втором, в новой сроке выводятся вся строка, кроме букв q, r и u, а нужно исключить полностью слово с ними.
Вот мой код:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
 
        char[] rsl = { ',' };
        char[] kstr = { '.' };
        string[] mslov = new string[20];
        string rez = new string(' ', 100);
        int i, mm, n;
        int[] mch = new int[20];
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            string x = new string(' ', 100);
            x = textBox1.Text; ;
            x = Regex.Replace(x, @"[^A-PS-TV-Za-ps-tv-z, '.', ',']", " ");
            if (x.Length == 0)
                textBox2.Text = "Нет слов удовлетворяющих условию";
            else
            textBox2.Text = x;
        }
 
        static int str_sl(string x, char[] rsl, char[] kstr, out string[] mslov)
        {
            char[] razd = new char[2];
            razd[0] = rsl[0];
            razd[1] = kstr[0];
            int n = 0;
            mslov = new string[20];
            mslov = x.Split(razd);
            n = mslov.Length;
            return n;
        }
        static string obr_sl(int n, string[] mslov)
        {
            int i, j, j1, j2;
            string rezstr, b;
            string a;
            char[] cif = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' };
            rezstr = new string(' ', 0);
            for (i = 0; i < n; i++)
            {
                b = string.Copy(mslov[i]);
                int l = b.Length;
                j1 = b.IndexOfAny(cif);
                j2 = b.LastIndexOfAny(cif);
                if (j1 != 0 && j2 != 0)
                {
                    a = new string(' ', 0);
                    for (j = 0; j < l; j++)
                        a = b[j] + a;
                    rezstr = rezstr + a;
                    rezstr = rezstr + ",";
                }
            } return rezstr;
        }
        static int chisl_cub(int n, string[] mslov, out int[] mch)
        {
            int l = 0, i, j1, j2, b;
            mch = new int[20];
            char[] cif = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' };
            for (i = 0; i < n; i++)
            {
                j1 = mslov[i].IndexOfAny(cif);
                j2 = mslov[i].LastIndexOfAny(cif);
                if (j1 == 0 && j2 == mslov[i].Length - 1)
                {
                    b = Convert.ToInt32(mslov[i]);
                    mch[l] = b * b; l++;
                }
            }
            return l;
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            string x = new string(' ', 200);
            listBox1.Items.Clear();
            x = textBox1.Text; ;
            n = str_sl(x, rsl, kstr, out mslov);
            mm = chisl_cub(n, mslov, out mch);
            if (mm == 0) listBox1.Items.Add("Нет числовых слов");
            else
                for (i = 0; i < mm; i++) listBox1.Items.Add(Convert.ToString(mch[i]));
 
        }
 
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.11.2016, 21:50
Ответы с готовыми решениями:

Обработка строки
Здравствуйте. Есть следующий код char separator = { ' ' }; string...

Обработка строки подключения
Добрый день. Имееется вот такой код public static SqlDataReader Sql_request(string str) ...

Обработка исключений для изменения строки
private void button1_Click(object sender, EventArgs e) { stroka =...

Обработка щелчка мышки в DataGridView и номер текущей строки
Мне интересно можно как-нибудь сделать, чтобы при щелчке мышки на строчке (или двойном щелчке) в...

15
20 / 20 / 14
Регистрация: 12.02.2016
Сообщений: 75
22.11.2016, 23:22 2
Первое что пришло в голову такое
Берём весь текст заганяем в масив string
C#
1
2
сhar[] separator = { ',', '.', '!', '?', '-', ' ',':',';' };
string[] s = textBox1.Text.Split(separator, StringSplitOptions.RemoveEmptyEntries);
Потому цыклом просматриваем массив
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
int i,i1;
List<string> l=new List<>;
for(i=0;i<s.Length;i++)
{
char[] symb=s[i].ToCharArray();
for(i1=0;i1<symb.Length;i1++)
{
if(symb[i]!='u' | symb[i]!='r' | symb[i]!='q')
{
l.Items.Add(s[i]);
}
}
}
ну и дальше выводишь этот лист

Добавлено через 1 минуту
Прошу прощения писал без студии,где то мог ошибиться
Но суть алгоритма должна быть ясна

Добавлено через 7 минут
Или такой момент,только что в голову пришло
добавлять не в лист а так
C#
1
2
3
string s1;//описать сверху,не в цыкле
//а в цыкл вместо l.Items.Add(s[i]);
s1+=s[i]+"|";
дале после цыкла удалить последний символ в s1
C#
1
s1=s1.SubString(0;s1.Length-1);
дале созадем регулярное выражение
C#
1
Regex reg=new Regex(s1,RegexOption.IgnoreCase);
ну и дали вы поняли
Весь код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
сhar[] separator = { ',', '.', '!', '?', '-', ' ',':',';' };
string[] s = textBox1.Text.Split(separator, StringSplitOptions.RemoveEmptyEntries);
int i,i1;
string s1;
for(i=0;i<s.Length;i++)
{
char[] symb=s[i].ToCharArray();
for(i1=0;i1<symb.Length;i1++)
{
if(symb[i]=='u' | symb[i]=='r' | symb[i]=='q')
{
s1+=s[i]+"|";
}
}
}
s1=s1.SubString(0;s1.Length-1);
Regex reg=new Regex(s1,RegexOption.IgnoreCase);
0
0 / 0 / 0
Регистрация: 22.11.2016
Сообщений: 8
22.11.2016, 23:39  [ТС] 3
суть я поняла, но есть ошибка: Items. вроде работает для ListBox только, но не для textBox, поэтому студия выдает ошибку: "System.Collections.Generic.List<string>" не содержит определения для "Items" и не был найден метод расширения "Items", принимающий тип "System.Collections.Generic.List<string>" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку)
0
20 / 20 / 14
Регистрация: 12.02.2016
Сообщений: 75
22.11.2016, 23:51 4
Второй способ берите)

Добавлено через 44 секунды
он проще и понятнее
я не хотел его удалять,как пример,оставил
0
0 / 0 / 0
Регистрация: 22.11.2016
Сообщений: 8
22.11.2016, 23:54  [ТС] 5
Цитата Сообщение от eXeShnik Посмотреть сообщение
s1=s1.SubString(0;s1.Length-1);
Regex reg=new Regex(s1,RegexOption.IgnoreCase);
И здесь идут похожие ошибки
"string" не содержит определения для "SubString"
В качестве оператора могут использоваться только выражения присваивания, вызова, инкремента, декремента и создания нового объекта
Элемент "RegexOption" не существует в текущем контексте.
0
20 / 20 / 14
Регистрация: 12.02.2016
Сообщений: 75
22.11.2016, 23:57 6
Ещё раз прошу прощения и повторю писал без студии
Не копируйте а пишите в ручную там где ошибка
0
0 / 0 / 0
Регистрация: 22.11.2016
Сообщений: 8
23.11.2016, 00:09  [ТС] 7
Я и прописала вручную, но все равно ошибки из-за того что программа просто не понимает эти функции, а ошибки синтаксиса я исправила
0
20 / 20 / 14
Регистрация: 12.02.2016
Сообщений: 75
23.11.2016, 00:15 8
так ща сикундочку) (уже давно бы сделал,но лень)

Добавлено через 3 минуты
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 char[] separator = { ',', '.', '!', '?', '-', ' ', ':', ';' };
            string[] s = textBox1.Text.Split(separator, StringSplitOptions.RemoveEmptyEntries);
            int i, i1;
            string s1="";
            for (i = 0; i < s.Length; i++)
            {
                char[] symb = s[i].ToCharArray();
                for (i1 = 0; i1 < symb.Length; i1++)
                {
                    if (symb[i] == 'u' | symb[i] == 'r' | symb[i] == 'q')
                    {
                        s1 += s[i] + "|";
                    }
                }
            }
            s1 = s1.Substring(0, s1.Length - 1);
            Regex reg = new Regex(s1, RegexOptions.IgnoreCase);
Добавлено через 26 секунд
Теперь можна копировать)
1
0 / 0 / 0
Регистрация: 22.11.2016
Сообщений: 8
23.11.2016, 00:34  [ТС] 9
Если я ввожу urq, получается urq|urq|urq|, а если есть другие буквы алфавита, слово не выводится, то есть программа работает наоборот, исключает то, что нужно оставить и наоборот
0
20 / 20 / 14
Регистрация: 12.02.2016
Сообщений: 75
23.11.2016, 00:41 10
C#
1
if (symb[i] != 'u' | symb[i] != 'r' | symb[i] != 'q')
тогда так)
0
0 / 0 / 0
Регистрация: 22.11.2016
Сообщений: 8
23.11.2016, 00:46  [ТС] 11
Пробовала, он и те и другие выводит буквы. А еще он повторяет слово столько раз, сколько в нем букв, например, при вводе asd выводится asd три раза подряд
0
20 / 20 / 14
Регистрация: 12.02.2016
Сообщений: 75
23.11.2016, 00:53 12
Ща пересмотрю ещё раз
0
0 / 0 / 0
Регистрация: 22.11.2016
Сообщений: 8
23.11.2016, 00:54  [ТС] 13
Исправила на if (symb[i] != 'u' & symb[i] != 'r' & symb[i] != 'q') работает только с первым словом и если одно из 3 букв первая, но повторы остались
0
20 / 20 / 14
Регистрация: 12.02.2016
Сообщений: 75
23.11.2016, 01:32 14
Я убрал повторы но завтра подумаю что нужно чтобы все слова проверяло,а не только первое
0
0 / 0 / 0
Регистрация: 22.11.2016
Сообщений: 8
23.11.2016, 20:11  [ТС] 15
Как вы убрали повторы?
0
20 / 20 / 14
Регистрация: 12.02.2016
Сообщений: 75
23.11.2016, 21:20 16
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
char[] separator = { ',', '.', '!', '?', '-', ' ', ':', ';' };
            string[] s = textBox2.Text.Split(separator, StringSplitOptions.RemoveEmptyEntries);
            int i, i1;
            string s1="";
            for (i = 0; i < s.Length; i++)
            {
                char[] symb = s[i].ToCharArray();
                for (i1 = 0; i1 < symb.Length; i1++)
                {
if (symb[i1] == 'u' | symb[i1] == 'r' | symb[i1] == 'q')
                    {
                        s1 += s[i] + "|";
                        break;//останавливает цыкл после нахождения буквы
                    }
}
}
Я вот одного понять не могу почему Regex.Replace неправильно меняет если патерн указан верный?
Опытные кодеры подскажите пожалуйста
1
23.11.2016, 21:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.11.2016, 21:20
Помогаю со студенческими работами здесь

Обработка команд из командной строки уже запущенным приложением
Добрый день уважаемые форумчане! Перейду сразу к сути: Необходимо что-бы приложение в запущенном...

Обработка строки. Как вырезать из имеющейся строки определенные символы
Имеется строка {текст} Как получить текст без {}?

Обработка строки. Как скопировать из строки определенный кусочек
Господа программисты. Я с очередной проблемой.... Имеем строку большой длины, а именно 42 символа....

обработка строки
День добрый всем, а заранее и спасибо. Нужна ваша помощь, есть задача на обработку строки:...


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

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