簡體   English   中英

帶有鏈表的 C# 字謎檢查器

[英]C# Anagram Checker With LinkedList

我正在嘗試檢查兩個單詞是否是字謎,並嘗試使用 LinkedList 執行此操作。為此,首先,我創建了一個名為 LinkedList 的類:

class LinkedList
 {
    private Node head;
    private int count;

    public LinkedList()
    {
        this.head = null;
        this.count = 0;
    }

    public bool Empty
    {
        get { return this.count == 0; }
    }

    public int Count
    {
        get { return this.count; }
    }

    public object this[int index]
    {
        get { return this.Get(index); }
    }

    public object Add(int index,object o)
    {
        if (index < 0)
        {
            throw new ArgumentOutOfRangeException("Index - " + index); //if index is less than 0 throw an error message
        }
        if (index > count)  // if size exceeds the limit of the list the item will be added to the last line of the list.
        {
            index = count;
        }

        Node current = this.head;

        if(this.Empty || index== 0)
        {
            this.head = new Node(o, this.head);
        }
        else
        {
            for(int i = 0; i < index - 1; i++)
            {
                current = current.Next;
            }

            current.Next = new Node(o, current.Next);
        }
        count++;

        return o;


    }

    public object Add(Object o)
    {
        return this.Add(count, o);
    }

    public object Remove(int index)
    {
        if (index < 0)
        {
            throw new ArgumentOutOfRangeException("Index - " + index);
        }
        if (this.Empty)
        {
            return null;
        }

        if (index >= this.count)
        {
            index = count-1;
        }

        Node current = this.head;
        object result = null;


        if (index == 0)
        {
            result = current.Data;   //gets the first node
            this.head = current.Next;  //makes 2nd node to the first node 
        }
        else
        {
            for(int i = 0; i < index - 1; i++)
            {
                result = current.Next.Data;
            }
            result = current.Next;
            current.Next = current.Next.Next;
        }
        count--;

        return result;
    }
    public int IndexOf(object o)
    {
        Node current = this.head;


        for(int i = 0; i < this.count; i++)
        {
            if (current.Data.Equals(o))
            {
                return i;
            }
            current = current.Next;
        }
        return -1;
    }

    public bool Contains(object o)
    {
        return this.IndexOf(o) >= 0; //if list contains object it returns bigger value than -1 and also 0.
    }

    public object Get(int index)
    {
        if(index < 0)
        {
            throw new ArgumentOutOfRangeException("Index - " + index);
        }

        if (this.Empty)
        {
            return null;
        }

        if(index >= this.count)
        {
            index = this.count-1;
        }

        Node current = this.head;


        for(int i=0;i< index; i++)
        {
            current = current.Next;
        }

        return current.Data;
    }
}

另一個名為“節點”的類:

class Node
{
    private object data;
    private Node next;

    public Node(object data,Node next) //constructor
    {
        this.data = data;
        this.next = next;
    }

    public object Data
    {
        get { return this.data; }
        set { this.data = value; }
    }
    public Node Next
    {
        get { return this.next; }
        set { this.next = value; }
    }
}

在主程序中,我從鏈表類中創建了兩個對象,並從用戶那里讀取了兩個字符串,並將單詞的字符添加到鏈表中。並比較了字符,如果發現它們將從鏈表中刪除,增加計數器等等on.If counter 等於 list1's number ofelements 那么它們是 anagrams 如果不是的話不是 anagrams.Here 是我的主要程序代碼:

class Program
{

    static void Main(string[] args)
    {


        int counter = 0;
        String word1, word2;
        Console.WriteLine("Welcome to Anagram Checker!\nPlease enter your first word:");
        word1 = Console.ReadLine();
        Console.WriteLine("\nPlease enter the second word:");
        word2 = Console.ReadLine();

        int result = AnagramChecker(word1, word2, counter);

        if (result == 1)
        {
            Console.WriteLine("These words are anagram");
        }
        if (result == 0)
        {
            Console.WriteLine("The words are not anagrams");
        }

        Console.ReadLine();
    }

    public static int AnagramChecker(String word1, String word2, int counter)
    {
        char[] ArrayWord1 = word1.ToCharArray();
        char[] ArrayWord2 = word2.ToCharArray();

        LinkedList list1 = new LinkedList();
        LinkedList list2 = new LinkedList();


        for (int i = 0; i < ArrayWord1.Length; i++) //Adds char of word1 to the list
        {
            list1.Add(i,ArrayWord1[i]);
        }


        for (int j = 0; j < ArrayWord2.Length; j++) //Adds char of word2 to the list
        {
            list2.Add(j,ArrayWord2[j]);
        }

        int max;
        if (list1.Count >= list2.Count)
        {
            max = list1.Count;
        }
        if (list2.Count > list1.Count)
        {
            max = list2.Count;
        }

        for (int i = 0; i < list1.Count; i++)
        {

            if (list2.Contains(list1[i]) && list1.Contains(list2[i]))
            {
                list1.Remove(i);
                list2.Remove(list2.IndexOf(list1[i]));

                counter++;
            }
        }

        Console.WriteLine(counter);

        if (counter == word1.Length || counter == word2.Length)
        {
            return 1;
        }

        else
            return 0;
    }
}

當我輸入不同的單詞時,我得到不同的結果。輸出示例如下。我做錯了什么?

輸出:

1-)

輸出 1 和它的錯誤

2-)

輸出 2 和它的錯誤

感謝您的幫助。

如果您只是想查找單詞是否為字謎,您可以使用以下方法:

private static bool areAnagrams(string word1, string word2)
{
    List<char> w1 = word1.OrderBy(c => c).ToList();
    List<char> w2 = word2.OrderBy(c => c).ToList();

    return !w1.Where((t, i) => t != w2[i]).Any();
}

它創建了兩個用字符字符排序的列表,然后比較兩者。


更具可讀性的等價物:

private static bool areAnagrams(string word1, string word2)
{
    List<char> w1 = word1.OrderBy(c => c).ToList();
    List<char> w2 = word2.OrderBy(c => c).ToList();

    if (w1.Count != w2.Count)
        return false;

    for (int i = 0; i < w1.Count; i++)
    {
        if (w1[i] != w2[i])
            return false;
    }
    return true;
}

我解決了這個問題,我只是修改了 if 語句來檢查它們是否是字謎:

for (int i = 0; i < list1.Count; i++)
        {

            if (list2.Contains(list1[i]))
            {
                list1.Remove(i);
               // list2.Remove(list2.IndexOf(list1[i]));

                i--;
                counter++;

            }

謝謝大家的幫助:)

在發布招聘廣告的網站中,用戶可以與自己的信息共享信息。通過該網站注冊其當前簡歷,注冊用戶可以使用其簡歷在系統中注冊到網站上發布的招聘廣告以及新的簡歷,特定於廣告發布者。網站所有者可以查看和下載廣告發布者的簡歷。從管理面板。設計圖..指定表之間的關系。寫下查詢以顯示多少人申請了每個發布工作。

QUESTİONNN-在此處快速回答SQL

PLS-LOOK。

編寫代碼塊以創建兩個帶有150個隨機項目的整數aray。 將這些數組的項目按排序收集到另一個數組中。您應該使用冒泡排序。

根據參數中指定的另一個值,將函數返回列表寫入給定列表的奇數或偶數。

編寫一個函數,該函數掃描給定單詞的每個字符作為參數,並將同一字符並排轉換為重復次數和字符。

例如:BBDCCCFF => 2BD3C2F

你的答案是:

int[] sayilar1 = new int[150];
    int[] sayilar2 = new int[150];

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        var rand = new Random();

        for (int i = 0; i < sayilar1.Length; i++)
        {
            sayilar1[i] = rand.Next();
            sayilar2[i] = rand.Next();

            lvNumbers.Items.Add(sayilar1[i].ToString());
            lvNumbers.Items.Add(sayilar2[i].ToString());
        }



    }

    private void btnShuffle_Click(object sender, EventArgs e)
    {
        int[]newArray=BubbleSort();

        for (int i = 0; i < newArray.Count(); i++)
        {
            lvSorted.Items.Add(newArray[i].ToString());
        }
    }

    private int[] BubbleSort()
    {
        int temp = 0;
        int[] newArray = new int[300];
        for (int i = 0; i < 300; i++)
        {
            if (i < 150)
            {
                newArray[i] = sayilar1[i];
            }
            if (i >= 150)
                newArray[i] = sayilar2[i - 150];
        }

        for (int i = 0; i < newArray.Length; i++)
        {
            for (int sort = 0; sort < newArray.Length - 1; sort++)
            {
                if (newArray[sort] > newArray[sort + 1])
                {
                    temp = newArray[sort + 1];
                    newArray[sort + 1] = newArray[sort];
                    newArray[sort] = temp;
                }
            }
        }
        return newArray;
    }
}

2.

     private void btnTek_Click(object sender, EventArgs e)
    {
        lvFiltered.Items.Clear();

        string[] sayilar = tbSayilar.Text.Split('\n');
        int[] array = new int[sayilar.Length];

        for (int i = 0; i < sayilar.Length; i++)
        {
            array[i] = int.Parse(sayilar[i]);
        }


        List<int> ayiklanmisSayilar = TekCiftAyir(array, "T");

        for (int i = 0; i < ayiklanmisSayilar.Count; i++)
        {
            lvFiltered.Items.Add(ayiklanmisSayilar[i].ToString());
        }
    }
    private void btnCift_Click(object sender, EventArgs e)
    {
        lvFiltered.Items.Clear();

        string[] sayilar = tbSayilar.Text.Split('\n');
        int[] array = new int[sayilar.Length];

        for (int i = 0; i < sayilar.Length; i++)
        {
            array[i] = int.Parse(sayilar[i]);
        }
        List<int> ayiklanmisSayilar = TekCiftAyir(array, "C");

        for (int i = 0; i < ayiklanmisSayilar.Count; i++)
        {
            lvFiltered.Items.Add(ayiklanmisSayilar[i].ToString());
        }
    }

    private List<int> TekCiftAyir(int[] array, string TC)
    {
        List<int> ayiklanmisSayilar = new List<int>();

        if (TC == "T")
        {
            for (int i = 0; i < array.Length; i++)
            {
                if (array[i] % 2 == 1)
                {
                    ayiklanmisSayilar.Add(array[i]);
                }
            }
        }
        if (TC == "C")
        {
            for (int i = 0; i < array.Length; i++)
            {
                if (array[i] % 2 == 0)
                {
                    ayiklanmisSayilar.Add(array[i]);
                }
            }
        }
        return ayiklanmisSayilar;
    }


    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM