2013-04-10 4 views
0

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

Три массивы

а = аф строчные буквы

б = AF прописные буквы

с = 1-6 номера

программа работает: строчными, капитал, числовые, строчные + числовые, капитальные + числовые и строчные + капитальные + числовые, , но то, что не работает, является строчными буквами + капитал, который равен (c.Any(x.Contains) == false && a.Any(x.Contains) == true && b.Any(x.Contains) == true)

Код:

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 WindowsFormsApplication2 
{ 
public partial class Form1 : Form 
{ 
    Char[] a = { 'a', 'b', 'c', 'd', 'e', 'f' }; 
    Char[] b = { 'A', 'B', 'C', 'D', 'E', 'F' }; 
    Char[] c = { '1', '2', '3', '4', '5', '6' }; 



    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     textBox1.Text = ""; 
     if(textBox2.Text != "") 
     { 
      Char[] x = textBox2.Text.ToCharArray(); 
      if (c.Any(x.Contains) == true && a.Any(x.Contains) ==false && b.Any(x.Contains)==false) 
      { 
       textBox1.Text = "num"; 
      } 
      else if (b.Any(x.Contains) == true && c.Any(x.Contains) == false && a.Any(x.Contains) ==false) 
      { 
       textBox1.Text = "cap"; 
      } 
      else if (a.Any(x.Contains) == true && c.Any(x.Contains) == false && c.Any(x.Contains) == false) 
      { 
       textBox1.Text = "low"; 
      } 
      else if (c.Any(x.Contains) == false && a.Any(x.Contains) == true && b.Any(x.Contains) == true) 
      { 
        textBox1.Text = "low&cap"; 
      } 
      else if (a.Any(x.Contains) == true && c.Any(x.Contains) == true && b.Any(x.Contains) == false) 
      { 
       textBox1.Text = "low&num"; 
      } 
      else if (b.Any(x.Contains) == true && c.Any(x.Contains) == true && a.Any(x.Contains) == false) 
      { 
       textBox1.Text = "cap&num"; 
      } 
      else if (a.Any(x.Contains) == true && b.Any(x.Contains) == true && c.Any(x.Contains) == true) 
      { 
       textBox1.Text = "cap&num&low"; 
      } 

     } 
    } 

    private void Form1_Load(object sender, EventArgs e) 
    { 

    } 
} 
} 

Спасибо вперед

EDIT

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

+0

FYI: У вас есть вопросы логики в вашем коде. – jp2code

+0

Да, спасибо, я заметил его сразу после того, как я задал вопрос – WolfyD

ответ

2

Что-то вроде этого?

Char[] lower = { 'a', 'b', 'c', 'd', 'e', 'f' }; 
Char[] upper = { 'A', 'B', 'C', 'D', 'E', 'F' }; 
Char[] number = { '1', '2', '3', '4', '5', '6' }; 

List<string> types = new List<string>(); 
if(lower.Any(l=>x.Contains(l)) 
    types.Add("low"); 
if(upper.Any(u=>x.Contains(u)) 
    types.Add("cap"); 
if(number.Any(n=>x.Contains(n)) 
    types.Add("num"); 

textbox1.Text = string.Join("&",types); 

обратите внимание, что вы не должны преобразовать входную строку в char массив - string.Contains() будет работать.

+0

Спасибо, D Stanley, tho 'string.contains' был первым, что я пробовал, ему не очень понравилась идея – WolfyD

0

Линия, тест на «низкий» является неправильной, вы проверяете два с половиной раза массива гр
Изменений в

else if (c.Any(x.Contains) == false && a.Any(x.Contains) == true && b.Any(x.Contains) == true) 

Этой ошибка захватывает всегда строку со смешанной буквой и еще, если для «низкой & колпачок «никогда не доходит.

1

Вы изучали письменное сообщение? Они делают это очень приятно!

private void button1_Click(object sender, EventArgs e) 
{ 
    textBox1.Text = textBox2.Text.MyContains(); 
} 

Конечно, вы можете изменить название этого расширения на то, что работает на вас.

Расширение нужно будет идти в статический класс, и может быть столь же просто, как это:

public static class Extensions { 

    private static Char[] a = { 'a', 'b', 'c', 'd', 'e', 'f' }; 
    private static Char[] b = { 'A', 'B', 'C', 'D', 'E', 'F' }; 
    private static Char[] c = { '1', '2', '3', '4', '5', '6' }; 

    public static string MyContain(this string value) { 
    Char[] x = value.ToCharArray(); 
    string result = null; 
    if (a.Any(l => x.Contains(l))) { 
     result = "low"; 
    } 
    if (b.Any(c => x.Contains(c))) { 
     result = String.IsNullOrEmpty(result) ? "cap" : result + "&cap"; 
    } 
    if (c.Any(n => x.Contains(n))) { 
     result = String.IsNullOrEmpty(result) ? "num" : result + "&num"; 
    } 
    return result; 
    } 

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