2017-01-17 3 views
1

Можете ли вы, ребята, сказать мне, почему эта программа не меняет мою строку ввода в строчную строку, содержащую только буквы? Я имею в виду, что только часть письма работает, но буквы не меняются на нижний регистр. Когда я пишу ЖЕЛТЫЙ, я должен видеть желтый цвет в окне, но я все еще передаю YELLOW весь верхний регистр в качестве вывода.Простая программа для преобразования строки в нижний регистр и допускать, чтобы только буквы не работали

namespace ConsoleApplication6 
{ 
class czlowiek 
{ 
    private string _imie; 
    private string _nazwisko; 
    private int _wiek; 

    public string imie 
    { 
     get 
     { 
      return _imie; 
     } 
     set 
     { 
      for (int i = 0; i < value.Length; i++) 
      { 
       if (Convert.ToInt32(char.ToLower(value[i])) >= 97 &&  Convert.ToInt32(char.ToLower(value[i])) <= 122) 
        _imie += value[i]; 
      } 
     } 

    } 

    public string nazwisko 
    { 
     get 
     { 
      return _nazwisko; 
     } 
     set 
     { 
      for (int i = 0; i < value.Length; i++) 
      { 
       if (Convert.ToInt32(char.ToLower(value[i])) >= 97 && Convert.ToInt32(char.ToLower(value[i])) <= 122) 
        _nazwisko += value[i]; 
      } 

     } 

    } 
    public int wiek 
    { 
     get 
     { 
      if (_wiek < 0 || _wiek > 100) 
       return 0; 
      else 
       return _wiek; 
     } 
     set 
     { 
      if (value < 0 || value > 100) 
       Console.WriteLine("Wporwadzona wartość niepoprawna"); 
      else 
        _wiek = value; 
     } 
    } 

} 
} 

и основная программа:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication6 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     czlowiek admin = new czlowiek(); 

     Console.Write("Podaj swoje imie: "); 
     admin.imie = Console.ReadLine(); 
     Console.WriteLine("Cześć {0}!", admin.imie); 

     Console.WriteLine("Podaj swój wiek: "); 
     admin.wiek = int.Parse(Console.ReadLine()); 
     if (admin.wiek != 0) 
      Console.Write("Masz {0}", admin.wiek); 


     Console.ReadLine(); 

    } 
} 
} 
+2

Поскольку вы преобразовать в нижний регистр только в 'if' не в назначении, то вы используете оригинальный' значение [я] ' –

+1

У вас есть упражнение, где вы не можете используйте некоторые интересные функции, такие как String.ToLower(), или вы не знаете об этом? – DonTintoretto

+0

Вы можете упростить сеттер: 'set {_imie = string.Concat (значение.Where (Char.IsLetter). Выбрать (Char.ToLower)); } ' –

ответ

1

Вы должны установить значения, как это:

_imie += char.ToLower(value[i]); 
_nazwisko += char.ToLower(value[i]); 
+0

Он отлично работает. Большое спасибо. – Mike

+0

Отметьте как ответ, будет лучше) –

1

Хорошо так, если я правильно понимаю. Вы хотите «преобразовать» строку в нижний регистр и удалить любой символ, который не является алфавитным символом («a-z»)?

Если это так, то вы можете использовать этот кусок кода:

public string imie 
{ 
    get { ... } 
    set { 
     _imie = new string(value.Where(c => char.ToLower(c) >= 'a' && char.ToLower(c) <= 'z').Select(c => char.ToLower(c)).ToArray()); 
    } 
} 

Это позволит избавиться от всех не алфавитных символов затем бросить все в нижнем регистре и создать string.

Check how it works

+0

Да, вы поняли это правильно. Это тоже хорошо работает. Большое спасибо. – Mike

0

Если вы действительно не нужно обрабатывать значение входного сигнала для imie посимвольно, то ваш сеттер может быть:

set 
{ 
    _imie = new string(value.Where(char.IsLetter).Select(char.ToLower).ToArray()); 
} 

Кроме того,

admin.wiek = int.Parse(Console.ReadLine()); 

должны быть повторно составленный по адресу:

int numberValue; 
admin.wiek = int.TryParse(Console.ReadLine(), out numberValue) ? numberValue : 0; 

, чтобы избежать проблем с синтаксическим анализом с пустыми строками или строками, содержащими нечисловые символы.

0

Попробуйте этот фрагмент:

string value = "HellO1234"; 
     IEnumerable<char> letters = value.Where(ch => char.IsLetter(ch)); 
     string letersString; 
     string smallLetters; 
     if(letters.Any()) 
     { 
      letersString = new string(letters.ToArray()); 
      smallLetters = letersString.ToLower(); 
     } 
+0

Вы знаете, что символ 'ª' с кодом (' 170') вернет 'True', используемый внутри' char.IsLetter() '? –

Смежные вопросы