C#求字符串中第一个只出现一次的字符

来源:互联网 发布:科拉传奇 知乎 编辑:程序博客网 时间:2024/06/13 23:30

using System;
using System.Collections.Generic;
using System.Collections;//使用Hashtable时,必须引入这个命名空间
using System.Linq;
using System.Text;

class Program
    {

//方法1:

public static char FirstNotRepeatingChar(string str)
        {
            char c='\0';
            if (str == null)
                return '\0';
            else
            {
                Hashtable hshTable = new Hashtable(); //用哈希表来存储字符与其对应出现的个数
                char[] strChar = str.ToCharArray();
                for (int i = 0; i < str.Length; i++)
                {
                    if (hshTable.ContainsKey(strChar[i]))   //如果已存在该字符,则该字符的个数加1
                    {
                        hshTable[strChar[i]] = int.Parse(hshTable[strChar[i]].ToString()) + 1;
                    }
                    else                                                              //否则,该字符的个数置为1
                    {
                        hshTable.Add(strChar[i], 1);
                    }
                }


                List<char> list = new List<char>();
                foreach (DictionaryEntry de in hshTable) //取出只出现一次的字符
                {
                    if (de.Value.ToString() == "1")
                    {
                        list.Add((char)de.Key);
                    }
                }
                if (list != null)
                {
                    for (int x = 0; x < str.Length; x++)            //取出首个只出现一次的字符
                    {
                        foreach (char ch in list)
                        {
                            if (strChar[x] == ch)
                            {
                                c = strChar[x];
                                break;
                            }


                        }
                        if (c != '\0')
                        {
                            break;
                        }


                        //return strChar[x];
                    }
                }
                return c;
            }
        }

//方法2

public static char findFirstAndOnce(string str)

        {
            char c = '\0';
            ArrayList  Clist = new ArrayList();  //存储字符串中包含的所有不重复的字符
            char[] strChar=str.ToCharArray();
            int[]  strInt=new int[256];          //所有字符的个数
            for (int x = 0; x < str.Length; x++)
            {
                if (Clist.Contains(strChar[x]))
                {
                    strInt[Clist.IndexOf(strChar[x])]++;//如果已含有该字符,则将该字符的个数加1
                }
                else
                {
                    Clist.Add(strChar[x]);
                    strInt[Clist.Count-1]=1;//如果不包含该字符,则将该字符的个数置为1
                }
            }
            for (int j = 0; j < strInt.Length; j++)
            {
                if (strInt[j] == 1)
                {
                    c = (char)Clist[j];//取出第一个只出现一次的字符
                    break;
                }
            }           
            return c;


        }

static void Main(string[] args)
        {

           string str = "asas1111212wqerwteqrtrm";
            //char x = findFirstAndOnce(str);  
            //char x = FirstNotRepeatingChar(str);
            //char x = firstAndOnce(str);
            char x = findFirstAndOnce(str);            
            if (x.Equals('\0'))
            {
                Console.WriteLine("没有只出现一次的字符");
                            
            }
            else
                Console.WriteLine("第一个只出现一次的字符是:{0}", x);  
        }

}

原创粉丝点击