0

私の問題は、文字列に設定した3つの文字配列の1つ以上が含まれているかどうかを確認したいということです.私が間違っていることを知りません。

3 つの配列は、

a = af 小文字

b = AF 大文字

c = 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)
    {

    }
}
}

よろしくお願いします

編集

気にしないでください、私はそれを理解しましたプログラムは最初に小文字のみのオプションを見つけ、それ以上調べることを気にしませんでした...

4

3 に答える 3

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()同様に機能します。

于 2013-04-10T21:03:09.883 に答える
0

「low」をテストする行が間違っています。配列 c
を2 回テストします。

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

そのエラーは常に大文字と小文字が混在する文字列をキャプチャし、else if for "low&cap" に到達することはありません。

于 2013-04-10T21:07:34.197 に答える