Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
nicka0825
0 / 0 / 1
Регистрация: 27.07.2017
Сообщений: 32
#1

Вывести слова в алфавитном порядке - C#

27.07.2017, 12:08. Просмотров 415. Ответов 10
Метки нет (Все метки)

Доброго времени суток!

Задача состоит в том, чтобы написать программу, которая получает на вход три слова, а на выходе выстраивает их в алфавитном порядке.

http://www.cyberforum.ru/csharp-beginners/thread258595.html
Вот код:

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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Задание_3
{
    public partial class Form1 : Form
 
    {
        string s;
 
 
        public Form1()
        {
            InitializeComponent();
        }
 
 
 
        private void Form1_Load(object sender, EventArgs e)
        {
            
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            
            int ks = 3, n = 0;
            string[] MassivSlov = new string[n];
            MassivSlov = new string[ks];
            for (int k = 0; k < ks; k++)
            {
                MassivSlov[k] = textBox1.Text;
            }
 
            int x, y;
            string str = "";
            // сортировка Пузырьком
            for (x = 0; x < MassivSlov.Length - 1; x++)
            {
                for (y = x; y < MassivSlov.Length; y++) 
                {
                    if (String.Compare(MassivSlov[x], MassivSlov[y]) > 0)
                    {
                        str = MassivSlov[y];
                        MassivSlov[y] = MassivSlov[x];
                        MassivSlov[x] = str;
                    }
                }
            }
 
            for (x = 0; x < MassivSlov.Length; x++)
            {
                textBox2.Text = MassivSlov[x];
            }
 
        }
 
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            s = textBox1.Text;
        }
    }
}
На форме: два текстбокса и кнопка. Во второй текстбок должен выводиться результат, т.е. слова в алфавитном порядке, но на деле порядок слов не меняется. Подскажите, пожалуйста, в чем ошибка?

Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.07.2017, 12:08
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вывести слова в алфавитном порядке (C#):

Вывести слова сообщения в алфавитном порядке
Дана строка, в которой содержится осмысленное текстовое сообщение. Слова...

Вывести слова сообщения в алфавитном порядке
Задана строка (вводится с клавиатуры). Обработать строку , НЕ используя методы...

Вывести в алфавитном порядке слова текста, в которых повторяется первая буква
program PascalGuru; uses crt; label 1,2; var s,zs,zp,gl,slovo,l:string; ...

Вывести строку, содержащую слова, разделенные одним пробелом и расположенные в алфавитном порядке
Дана строка, состоящая из русских слов, набранных заглавными буквами и...

Ввести с клавиатуры три слова, разделенные пробелами, и вывести на экран буквы отсортированные в алфавитном порядке
Помогите решить задачу: &quot;Ввести с клавиатуры три слова(кириллица), разделенные...

10
Почтальон
Модератор
582 / 520 / 104
Регистрация: 22.03.2015
Сообщений: 3,619
Завершенные тесты: 1
27.07.2017, 12:11 #2
Если вам требуется не важно каким методом, тогда проще загнать данные в списочный тип, и воспользоваться штатными методами по сортировке.
1
nicka0825
0 / 0 / 1
Регистрация: 27.07.2017
Сообщений: 32
27.07.2017, 13:21  [ТС] #3
Попробовала сделать по-другому, но не соображу, как вывести результат в текстбокс. Подскажите, пожалуйста.
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Задание_3
{
    public partial class Form1 : Form
 
    {
        string s, s1, s2, s3;
 
 
        public Form1()
        {
            InitializeComponent();
        }
 
 
 
        private void Form1_Load(object sender, EventArgs e)
        {
            
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            // разделить слова в строке s
            string[] words = s.Split(' ');
            s1 = words[0];
            s2 = words[1];
            s3 = words[2];
 
            // сортировка по алфавиту в List
            List<string> Slova = new List<string>();
            Slova.Add(s1);
            Slova.Add(s2);
            Slova.Add(s3);
            Slova.Sort();
 
            // Вывод
 
 
        }    
 
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            s = textBox1.Text;
        }
    }
}
0
Gekr
41 / 42 / 31
Регистрация: 01.10.2012
Сообщений: 185
Завершенные тесты: 1
27.07.2017, 13:35 #4
TextBox не годиться для вывода. Используйте либо RichTextbox либо ListBox.


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
    public partial class Form1 : Form
 
    {
        string s, s1, s2, s3;
 
 
        public Form1()
        {
            InitializeComponent();
        }
 
 
 
        private void Form1_Load(object sender, EventArgs e)
        {
            
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            // разделить слова в строке s
            string[] words = s.Split(' ');
            s1 = words[0];
            s2 = words[1];
            s3 = words[2];
 
            // сортировка по алфавиту в List
            List<string> Slova = new List<string>();
            Slova.Add(s1);
            Slova.Add(s2);
            Slova.Add(s3);
            Slova.Sort();
 
            // Вывод
            OutputWords();
 
        }    
 
        private void OutputWords()
      {
            if (listbox1.DataSource != null)
                 listbox1.DataSource = null;
            else
                 listbox1.DataSource = Slova;
      }
    }
0
Почтальон
Модератор
582 / 520 / 104
Регистрация: 22.03.2015
Сообщений: 3,619
Завершенные тесты: 1
27.07.2017, 13:47 #5
у текстобокса нужно выставить флаг (свойство) - многострочный (не помню как точно называется)
0
Gekr
41 / 42 / 31
Регистрация: 01.10.2012
Сообщений: 185
Завершенные тесты: 1
27.07.2017, 14:27 #6
В общем, вот два варианта.
В первом, более правдоподобном, что это делали вы, сортировка происходит в методе Sort().
Во втором, создан метод-расширение для BindingList<T>, который производит сортировку.

Коллекция BindingList<T> позволяет обновлять Controls, когда в ней происходит добавление или удаление элементов. Но обновление не производиться в случае если происходить обновление уже добавленного элемента - в этом, случае нужны дополнительные манипуляции (реализация интерфейса INotifyPropertyChanged и добавление Bindins через метод DataBindings.Add() с указанием OnPropertyChanged).

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
public partial class Form1 : Form
    {
        private BindingList<string> words;
 
        public Form1()
        {
            InitializeComponent();
            words = new BindingList<string>();
            wordsListB.DataSource = words;
        }
 
        private void addWordBtn_Click(object sender, EventArgs e)
        {
            words.Add(wordTb.Text);
            words.Sort<string>();
        }
 
        /*private void Sort()
        {
            int size = words.Count;
            for (int i = 1; i < size; i++)
            {
                for (int j = 0; j < (size - i); j++)
                {
                    if (String.Compare(words.ElementAt(j), words.ElementAt(j + 1)) > 0)
                    {
                        string temp = words.ElementAt(j);
                        words[j] = words.ElementAt(j + 1);
                        words[j+1] = temp;
                    }
                }
            }
        }*/
    }
Extensions class, расширяет функционал BindingList методами, которые определенны в этом классе.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static class Extensions
    {
        public static void Sort<T>(this BindingList<string> sortSequance)
        {
            int size = sortSequance.Count;
            for (int i = 1; i < size; i++)
            {
                for (int j = 0; j < (size - i); j++)
                {
                    if (String.Compare(sortSequance.ElementAt(j), sortSequance.ElementAt(j + 1)) > 0)
                    {
                        string temp = sortSequance.ElementAt(j);
                        sortSequance[j] = sortSequance.ElementAt(j + 1);
                        sortSequance[j + 1] = temp;
                    }
                }
            }
        }
    }
0
Изображения
 
Diamante
1262 / 1023 / 646
Регистрация: 14.08.2016
Сообщений: 3,542
Завершенные тесты: 1
27.07.2017, 16:02 #7
не проще ли использовать SortedSet, ему вообще ничего не надо
0
sldp
281 / 285 / 112
Регистрация: 29.10.2011
Сообщений: 957
Завершенные тесты: 2
27.07.2017, 21:17 #8
Цитата Сообщение от Gekr Посмотреть сообщение
TextBox не годиться для вывода. Используйте либо RichTextbox либо ListBox.
Это почему?)

Добавлено через 9 минут
Цитата Сообщение от nicka0825 Посмотреть сообщение
Подскажите, пожалуйста, в чем ошибка?
Цитата Сообщение от nicka0825 Посмотреть сообщение
int ks = 3, n = 0;
string[] MassivSlov = new string[n];
MassivSlov = new string[ks];
for (int k = 0; k < ks; k++)
{
MassivSlov[k] = textBox1.Text;
}
в textBox1 у вас слово/слова. Дальше вы создаете массив и в каждую его ячейку помещаете содержимое текстбокса.
Цитата Сообщение от nicka0825 Посмотреть сообщение
for (x = 0; x < MassivSlov.Length; x++)
{
textBox2.Text = MassivSlov[x];
}
Здесь та же ошибка. Вы поочередно перезаписываете текстбокс всеми элементами массива каждый поверх предыдущего.
Плюс нужно вынести сортировку в отдельный метод. тем более, подозреваю, что тема как раз "Сортировка".
Получится что-то такое:
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
private void button1_Click(object sender, EventArgs e)
{
    var words = textBox1.Text.Split(); // слова через пробел
    BubbleSort(words);
    textBox2.Text = string.Join(" ", words);
}
 
private void BubbleSort(string[] words)
{
    if (words == null || words.Length < 2)
        return;
 
    for (int i = 0; i < words.Length - 1; i++)
    {
        for (int j = i + 1; j < words.Length; j++)
        {
            if (string.Compare(words[i], words[j], StringComparison.Ordinal) > 0)
            {
                var temp = words[i];
                words[i] = words[j];
                words[j] = temp;
            }
        }
    }
}
0
Gekr
41 / 42 / 31
Регистрация: 01.10.2012
Сообщений: 185
Завершенные тесты: 1
27.07.2017, 23:02 #9
Цитата Сообщение от sldp Посмотреть сообщение
Это почему?)
Моя логика такова, что он предназначен для ввода и незачем его использовать для вывода данных, особенно если данные находятся в коллекции.
0
Почтальон
Модератор
582 / 520 / 104
Регистрация: 22.03.2015
Сообщений: 3,619
Завершенные тесты: 1
28.07.2017, 08:11 #10
Цитата Сообщение от Gekr Посмотреть сообщение
Моя логика такова, что он предназначен для ввода и незачем его использовать для вывода данных, особенно если данные находятся в коллекции.
Текстбокс со свойством мультилайн - это замена Memo
0
sldp
281 / 285 / 112
Регистрация: 29.10.2011
Сообщений: 957
Завершенные тесты: 2
28.07.2017, 11:10 #11
Цитата Сообщение от Gekr Посмотреть сообщение
предназначен для ввода
Вы ошибаетесь
0
28.07.2017, 11:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2017, 11:10
Привет! Вот еще темы с решениями:

Дана строка, состоящая из английских слов. Вывести строку, содержащую эти же слова, расположенные в алфавитном порядке
static void Main(string args) { ...

Проверить упорядочены ли слова в алфавитном порядке
Дана строка, состоящая из n символов. Группы символов, разделенные пробелами...

Напечатать слова в строке в алфавитном порядке
Помогите решить задачу. Дана строка, состоящая из 10 слов. Напечатать эту же...

Как отсортировать слова в List в алфавитном порядке
Hе могу понять, как отсортировать слова в List в алфавитном порядке, но...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru