2014-01-23 8 views
2

Мне нужно проверить, содержит ли моя строка только буквы и цифры. Пожалуйста, ЗАМЕТЬТЕ, что я знаю, что многие уже размещены здесь в stackoverflow, но ни один из них не помогает мне, потому что он не использует базовые функции!Проверка того, что строка содержит только буквы в консольном приложении в C#

Это моя домашняя работа, но, пожалуйста, помогите, потому что я не могу решить проблему.

Я сделал это с помощью Regex.IsMatch, но учитель сказал мне, что я могу использовать только базовые функции из библиотеки .net и использовать сложные функции, такие как сортировка, поиск символов и т. Д., Строго запрещенное.

Мой код

Console.Write("Enter your name: "); 

name = Console.ReadLine(); 
if (Regex.IsMatch(name, "[^A-Za-z_ŠšČ莞ĆćĐđ]")) 
{ 
    Console.WriteLine("No name entered!"); 
    Console.ReadLine(); 
} 

я понятия не имею, вообще, как это сделать по-другому. Поэтому, если есть кто-то, кто хочет помочь мне или дать мне подсказку, я действительно рад.

спасибо.

+0

@Yuriy, вы даже прочитали мое сообщение, прежде чем публиковать это? – fkr

+0

В c/C++ это будет 'if (! ((C> = 'A' && c <= 'Z') || (c> = 'a' && c <= 'z'))) {/ * * не ascii leter ** /} ' – sln

+0

Я просмотрел ответы здесь, и все они используют предположительно« неосновные »функции или методы. Конечно, ваш учитель определил, что он подразумевает под «базовым». Можете ли вы воспроизвести это определение здесь? В противном случае я не думаю, что кто-то сможет помочь. Разрешено ли вам проходить через все письма представления? – Cyberherbalist

ответ

2

Используйте char.IsLetter, чтобы проверить, являются ли все символы в строке буквами.

if (name.All(char.IsLetter)) 
{ 
    //All characters are letters 
} 

Это так же, как:

if (name.All(r => char.IsLetter(r))) 
+0

необходимо выполнить основные функции. char.IsLetter теперь разрешено – fkr

+0

@fkr, я могу дать вам подсказку, перейдя через каждый символ вашей строки, проверьте, находится ли значение ASCII символа между 48 и 57, если оно есть, то вы получили цифру в своей строке. – Habib

+0

Спасибо, я дефло попробую это. – fkr

0

Loop символы и проверить их ASCii значения:

public Boolean IsAllLetters(String name) 
{ 
    for (Int32 i = 0; i < name.Length; i++) 
    { 
     if ((Int32)name[i] < 65 || ((Int32)name[i] > 90 && (Int32)name[i] < 97) || (Int32)name[i] > 122) 
      return false; 
    } 
    return true; 
} 

я предложить другой подход. Я использую пару методов расширения для достижения этой цели, давая мне гибкость, чтобы искать какой-либо группы символов:

public static class StringEx 
{ 
    public static Boolean ContainsOnly(this String theString, String characters) 
    { 
     return theString.TrimStart(characters.ToCharArray()).Length == 0; 
    } 

    public static Boolean ContainsOnly(this String theString, Char[] characters) 
    { 
     return theString.TrimStart(characters).Length == 0; 
    } 
} 
+0

«Я могу использовать только базовые функции из библиотеки .net и использовать сложные функции, такие как сортировка, поиск символов и т. Д., Строго запрещен». ---> Это означает, что Contains или TrimStart или любые другие не базовые – fkr

+0

Имя [i] <'a' ... Не работает. –

+0

@DavidKhaykin Спасибо, отредактирован. Работа из памяти ... – DonBoitnott

0

Не используя никаких специальных функций:

public void RecognizeOnlyLettersInString() 
    { 
     string name = "test the 123 thing"; 
     Console.WriteLine(name); 

     string letters = "abcdefghijklmnopqrstuvwxyz"; 
     foreach (char c in name) 
     { 
      foreach(char letter in letters) 
      { 
       if (c == letter) 
       { 
        break; 
       } 

       if (letters.IndexOf(letter) == letters.Count() - 1) 
       { 
        Console.WriteLine("{0} is not a letter", c); 
       } 
      } 
     } 
    } 
+0

Большое вам спасибо, но я уже решил проблему, используя ASCII, написанную Habib. Большое вам спасибо за неприятности! – fkr

0

Ну, я вижу ответ есть уже было принято, но в нем использовалась функция, которую, по словам собеседника, он не мог использовать, поэтому, поскольку я пошел на труд по построению ответа, я приведу его здесь для того, чтобы прийти к выводу.

Console.WriteLine("Enter your name: "); 
string s = Console.ReadLine(); 
byte[] chars = Encoding.UTF8.GetBytes(s); 
bool hasnonletters = false; 
for (int x = 0; x < chars.Length; x++) 
{ 
    Console.Write("."); 
    int ascii = (int)chars[x]; 
    if (!((ascii > 64 && ascii < 91) || (ascii > 96 && ascii < 123))) 
    { 
     hasnonletters = true; 
     break; 
    } 
} 

if (hasnonletters) 
{ 
    Console.WriteLine("{0} has Non-letters!", s); 
} 
else 
{ 
    Console.WriteLine("{0} is all letters!", s); 
} 

Console.ReadKey(); 
Смежные вопросы