Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2012, 19:23   #1
Serg94
Форумчанин
 
Аватар для Serg94
 
Регистрация: 10.12.2011
Сообщений: 167
По умолчанию строки C#...

дана строка, содержащая несколько слов разделенных пробелами.Необходимо удалить из строки слова, состоящие из n букв. число n задает пользователь
................................... ...
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    static class Program
    {
        static void Main()
        { 
            Console.WriteLine("введите строку");
             string line=Console.ReadLine();
    
            var n = int.Parse(Console.ReadLine()); 
             
            var result = string.Join(" ", line.Split(' ').Where(word => word.Length != n).ToArray()); 
            Console.WriteLine(result);
            Console.ReadLine();
        }
    }
}
что не так в программе?

Последний раз редактировалось Stilet; 28.02.2012 в 14:30.
Serg94 вне форума Ответить с цитированием
Старый 28.02.2012, 00:08   #2
Fenex
Форумчанин
 
Аватар для Fenex
 
Регистрация: 15.02.2012
Сообщений: 821
По умолчанию

Код на работоспособность не проверялся. Но логика должна быть ясна.
Код:
string str = Console.ReadLine();
var n = int.Parse(Console.ReadLine()); 
string s = "";
for(int i=0;i<str.length;i++) {
    if(str[i]==' ') {
        if(s.length==n) {
             s = "";
        } else {
             Console.WriteLine(s);
             s = "";
        }
    } else {
        s += str[i];
    }
}
^-.-^ My GitHub
Fenex вне форума Ответить с цитированием
Старый 28.02.2012, 08:37   #3
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 823
По умолчанию

Код:
using System;
using System.Linq;

namespace ConsoleApplication1
{
    public class Program
    {
        private static void Main()
        {
            Console.WriteLine( "Введи строку" );
            var str = Console.ReadLine();
            Console.WriteLine( "Введи n" );
            var a = int.Parse( Console.ReadLine() ?? string.Empty );
            Console.WriteLine("Итого:");
            Console.WriteLine( string.Join( " ", str.Split( ' ' ).Where( item => item.Length != a ) ) );
            Console.ReadKey();
        }
    }
}
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 28.02.2012, 09:18   #4
Prizrak86
Форумчанин
 
Аватар для Prizrak86
 
Регистрация: 15.10.2011
Сообщений: 139
По умолчанию

Цитата:
Сообщение от Скарам Посмотреть сообщение

Код:

            var a = int.Parse( Console.ReadLine() ?? string.Empty );
а что делает то что выделено красным? не видел такого раньше....

Код:
Console.WriteLine(string.Join(" ", str.Split(' ').Where(item => item.Length != a)));
и вот тут, как понять знак =>...
и откуда переменная item взялась?
Программист это не профессия, программист - это образ жизни.

Последний раз редактировалось Prizrak86; 28.02.2012 в 09:28.
Prizrak86 вне форума Ответить с цитированием
Старый 28.02.2012, 10:10   #5
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 823
По умолчанию

Prizrak86, по первому:тырк. Словами строку можно переложить так:
Код:
string temp=Console.ReadLine();
int a;
if(temp!=null)
int.Parse( Console.ReadLine());
else 
int.Parse( пустая строка);
По второму: тырк. Словами долго объяснять, но проще говоря, что из нарезанного массива выбраны элементы с условием item.Length != a .
Цитата:
не видел такого раньше
Надо читать, читать..
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 28.02.2012, 11:10   #6
Prizrak86
Форумчанин
 
Аватар для Prizrak86
 
Регистрация: 15.10.2011
Сообщений: 139
По умолчанию

как я понял что правая часть от ?? будет срабатывать когда с лева значение NULL, я так понимаю это эквивалент пустой строчки а для численных типов это NULL но даже при вводе пустой строки возникает исключение? я так понимаю метод int.Parse() не может конвертировать так как значение NULL не является строковым типом и возможно компилятор в этом случае не считает что "" и NULL это одно и тоже и работает только левая часть и не может конвертировать пустую строку в число.

если я где то не правильно понял поправьте и по возможности объясните....

в общем если ввести пустую строку то будет ошибка и смысла я как то не вижу в операторе ??...
Программист это не профессия, программист - это образ жизни.

Последний раз редактировалось Prizrak86; 28.02.2012 в 11:31.
Prizrak86 вне форума Ответить с цитированием
Старый 28.02.2012, 12:20   #7
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 823
По умолчанию

Смысл в том, что у тебя изначально может прийти null,ну, а то, что он пустую строку не парсит.. поставь -1 или такое условие, которое будет корректно в конкретной задаче. Я не тестировал данный код, я его просто написал так, как я его вижу. Предложите более надежный вариант, который будет лучше и я первым его одобрю.
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 28.02.2012, 14:15   #8
Prizrak86
Форумчанин
 
Аватар для Prizrak86
 
Регистрация: 15.10.2011
Сообщений: 139
По умолчанию

Цитата:
Сообщение от Скарам Посмотреть сообщение
Смысл в том, что у тебя изначально может прийти null,ну, а то, что он пустую строку не парсит.. поставь -1 или такое условие, которое будет корректно в конкретной задаче. Я не тестировал данный код, я его просто написал так, как я его вижу. Предложите более надежный вариант, который будет лучше и я первым его одобрю.
я конечно не профи но то что выделено красным на мой взгляд лишнее в данной ситуации
Код:
var a = int.Parse( Console.ReadLine() ?? string.Empty );
можно и без него написать, я правда люблю использовать функцию для этого моего сочинения, мне так удобнее.

вот она
Код:
        static int ReadInt(string text)
        {
            int I;
            bool b;
            Console.Write(text);
            do
            {
                b = int.TryParse(Console.ReadLine(), out I);
                if (!b)
                {
                    Console.Clear();
                    Console.WriteLine("Вы ошиблись при вводе данных. Попробуйте еще раз.");
                    Console.Write(text);
                }
            }
            while (!b);
            return I;
        }
        static void Main()
        {
            int n = ReadInt("Введите n: ");
            Console.WriteLine(n);
            Console.ReadKey();
        }
Программист это не профессия, программист - это образ жизни.

Последний раз редактировалось Prizrak86; 28.02.2012 в 14:58.
Prizrak86 вне форума Ответить с цитированием
Старый 28.02.2012, 15:07   #9
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 823
По умолчанию

Да, такой способ имеет право на существование, снял шляпу. Но смысл не в том, чтобы заставить пользователя ввести корректное число, считаю в такой задаче это излишним. Смысл в том, чтобы Вы или тот, кто прочитал код полез в MSDN.
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 28.02.2012, 15:14   #10
Prizrak86
Форумчанин
 
Аватар для Prizrak86
 
Регистрация: 15.10.2011
Сообщений: 139
По умолчанию

Цитата:
Сообщение от Скарам Посмотреть сообщение
Да, такой способ имеет право на существование, снял шляпу. Но смысл не в том, чтобы заставить пользователя ввести корректное число, считаю в такой задаче это излишним. Смысл в том, чтобы Вы или тот, кто прочитал код полез в MSDN.
ну да, вопросы стал задавать тот кому это нужно и интересно, хороший психологический подход...буду иметь на вооружении...спасибо...

у нас преподаватель ужасно любит ломать программы вводя некорректные данные или данные приводящие к различным ошибкам например деление на ноль ну или другие случае где программа может повести себя не адекватно...вот и у меня выработалась привычка автоматически предусматривать такие случаи и по возможности их находить...
Программист это не профессия, программист - это образ жизни.
Prizrak86 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сделать в гриде строки выше, чтобы не растягивать строки до бесконечности kris__tina БД в Delphi 1 09.06.2011 15:31
Даны строки S и S0. Удалить из строки S все подстроки, совпадающие с S0 . Если совпадающих подстрок нет, Шпунюся Помощь студентам 1 16.12.2010 21:02
Создание пустой строки и копирование в неё содержимое предыдущей строки Gvaridos Microsoft Office Excel 2 29.10.2010 13:33
Определять максимальную длину той части строки s, которая не содержит символы из строки s1. Александе еть я Общие вопросы C/C++ 5 13.04.2010 20:54
Перенести символа с начала строки в место перед запятой этой же строки. Zhiltsov Microsoft Office Excel 4 05.06.2009 13:10