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

Почему решение не рационально в приведенном коде

15.06.2014, 20:01. Показов 885. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace _1
{
class Program
{
static void Main(string[] args)
{
int n;
Console.WriteLine("Введите текст:");
String text = Console.ReadLine();
string[] str = text.Split(' ');
n = str.Length;
for (int i = 0; i < n; i++) {
if (str[i].Substring(str[i].Length - 1, 1) == "ь")
{
Console.WriteLine("Первое слово которое заканчивается на ь: " + str[i]);
i = n;
}
}
 
Console.Read();
}
}
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.06.2014, 20:01
Ответы с готовыми решениями:

Почему mas(0,0) пустой в приведенном коде
Почему mas(0,0) пустой? Sub CoolSort(ByRef SourceArr() As Variant, ByVal N As Integer) '...

Почему в приведенном коде выводится число 6?
Собственно вопрос в теме, почему выводится число 6? sing System; using...

Почему в приведенном коде не увеличивается размерность массива
Помогите найти ошибку. Не понимаю что тут не правильно int x, y; x = 0;...

Почему не меняется значение переменной в приведенном коде
Здравствуйте, у меня есть код: Object a = 0; Object b = a; a...

11
123 / 123 / 72
Регистрация: 11.05.2014
Сообщений: 331
15.06.2014, 20:59 2
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
using System.Linq;
 
namespace ConsoleApplication5 {
    class Program {
        static void Main(string[] args) {
            Console.Write("Введите текст: ");
            String text = Console.ReadLine();
            string[] str = text.Split(' ');
            var result = from w in str where w.EndsWith("ь") select w;
            if (result.Count() > 0) {
                Console.WriteLine("Первое слово которое заканчивается на ь: ", result.First());
            }
            else {
                Console.WriteLine("Нет слов заканчивающихся на 'ь'.");
            }                  
            Console.ReadKey(true);
        }
    }
}
Добавлено через 7 минут
Ошибся в 12й строке, нужно:
C#
1
Console.WriteLine("Первое слово которое заканчивается на ь: " + result.First());
0
721 / 712 / 168
Регистрация: 15.06.2011
Сообщений: 1,704
16.06.2014, 00:24 3
Решить более рационально - значит более лаконично, кратко и понятно. Сохранение длины массива в отдельной переменной - это уже не рационально.
0
2151 / 1288 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
16.06.2014, 00:36 4
карина1699, рациональное решение я тебе давно выкладывал

тут многое не рационально ,а в особенности выход из цикла вот так "i = n;" == не знание оператора break;

если по простяцки писать то вот , вполне рационально

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
        static void Main(string[] args)
        {
            string result = null;
            Console.WriteLine("Введите текст:");
            foreach(var i in Console.ReadLine().Split(' '))
                if(i[i.Length-1]=='ь')
                {
                    result = i;
                    break;
                }
            Console.WriteLine("Первое слово заканчивающиеся на 'ь' : " + (result??"не найдено"));
            Console.Read();
        }
Добавлено через 1 минуту
Detect, Найти первое слово заканчивающееся мягким знаком в заданном тексте
0
Detect
16.06.2014, 01:07
  #5

Не по теме:

Много копий одних и тех же заданий. Просто когда натыкаюсь на то, что могу быстро сделать, то редко ищу аналоги по форуму -_-'

0
2151 / 1288 / 516
Регистрация: 04.03.2014
Сообщений: 4,092
16.06.2014, 01:09 6
Detect, я не про аналоги , а про более красивое решение с линкью
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
16.06.2014, 01:47 7
Metall_Version, чем не вариант?
C#
1
2
3
string str = "Найти первое слово твою заканчивающееся мать мягким знаком в заданом тексте";
Match first = Regex.Match(str, @"\b\w+[ьЬ]\b");
Console.WriteLine(first.Success ? first.Value : "Не найдено");
3
Эксперт .NET
1696 / 1325 / 316
Регистрация: 15.06.2012
Сообщений: 5,045
Записей в блоге: 3
16.06.2014, 03:35 8
Не уверен, но всё же: когда людей только учат писать програмки плана "вывести слово 'Ня!' десять раз", обычно требуют полной оптимизации. То есть: никаних лишних циклов/массивов; максимально быстро; максимально расширяемо (при условии, что перешли на ООП).

За что можно получить минус в балы...

C#
1
string[] str = text.Split(' ');
Создаеться дополнительный набор массивов. То есть в памяти текст занимает в два раза больше места.

C#
1
if (str[i].Substring(str[i].Length - 1, 1) == "ь")
Если почитать документацию, то Substring создает копию строки и уже её режет. А значит ещё раз дублируем текст в памяти.

C#
1
i = n;
Почитайте: Индусский код

Если чхать на производительность (например это единичная операция на запрос, а читаемость/сопровождаемость стоит верхним пунктом), то юзаем регулярки и не мучаем мозг. Нужно экономить байты и быстродействие? Бегаем по входному тексту до первого нужного знака, запоминая попутно старт нового слова. По нахождению - с точки старта слова вывести нужные символы.
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
16.06.2014, 10:51 9
Wolfdp, регулярка имеет максимальную удельную быстроту на количество строк. То есть ручным проходом по символам, может быть, и быстрее. Но займет это строк 10, а регулярка - 1.
0
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
16.06.2014, 11:23 10
Цитата Сообщение от Psilon Посмотреть сообщение
Но займет это строк 10
В данном конкретном случает меньше
C#
1
2
3
4
5
            string str = "Найти первое слово твою заканчивающееся мать мягким знаком в заданом тексте";
            var hi = str.IndexOfAny(new char [] {'ь', 'Ь'});
            int lo = hi;
            while ((lo >= 0) && (Char.IsLetter(str[lo]))) lo--;
            Console.WriteLine(hi >= 0 ? str.Substring(lo + 1, hi - lo) : "Не найдено");
0
Эксперт .NET
1696 / 1325 / 316
Регистрация: 15.06.2012
Сообщений: 5,045
Записей в блоге: 3
16.06.2014, 11:23 11
Psilon, кто ж спорить. С текущими вичислительными мощьностями нам дозволенно не экономить не спичках, а акцентировать внимание только на действительно нужных вещах. Но при обучении (в противном случае, я не понимаю почему вообще возник этот вопрос) желательно объяснять людям, что к чему.
0
NickoTin
17.06.2014, 00:34     Почему решение не рационально в приведенном коде
  #12
Часть сообщений выделено в отдельную тему: Поиск подстроки в строке [SpeedTest]
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.06.2014, 00:34

Почему происходит блокировка потоков в приведенном коде
Здравствуйте. Есть метод run. Создаются и запускаются 2 потока для вызова этого метода. По моему ...

Winsock. Почему в приведенном коде не работает создание сокета?
Добрый день! Пробую освоить сетевое программирование под винду. Планируется клиентское приложение,...

Почему в приведенном коде сообщается о переменной, которой не присвоено значение
Доброго времени суток! Подскажите, почему возникает ошибка &quot;Использование локальной переменной,...

Почему в приведенном коде при безформатном выводе не выходят значения
Private Sub Command1_Click() Picture1.Cls h = Val(Text1.Text) R = Val(Text2.Text) pi = 3.14 If...

Почему в приведенном коде переменные видны для всех классов?
Сегодня объяснял классы сыну. И наткнулся на следующее (и в WDE и в IDE). Почему этот код работает?...

Почему в приведенном коде цвет пиксела возвращает нулевое значение
Я создал приложение winforms ,в свойствах формы установил цвет фона на красный,далее вот кус кода:...


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

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