class Program
    {
        static void Main(string[] args)
        {
            string str = "AAAABBBBBBBCCCCCMMMMMMMNadcdfss";
            Dictionary<char, int> dic = new Dictionary<char, int>();
            for (int i = 0; i < str.Length; i++)
            {
                //如果key已经包含了某个字符 则不再添加 让它的value加一
                if (dic.Keys.Contains(str[i]))
                {
                    dic[str[i]]++;
                }
                else
                {
                    //不包含 则添加到字典中 并设置value为1
                    dic.Add(str[i], 1);
                }
            }
            foreach (KeyValuePair<char,int> item in dic)
            {
                Console.WriteLine("{0}出现了{1}次",item.Key,item.Value);
            }
            Console.Read();
        }
    }
结果:
希望能帮到你
谢谢您的回答,那如果把字符串改成“AAAABBBBBBBCCCCCAAAAAAA”呢?
想要的结果是
AAAA出现1次,
BBBBBBB出现1次,
CCCCC出现1次,
AAAAAAA出现1次
需求我没理清楚,望大神指教
@小也:
        //如果key已经包含了某个字符 则不再添加 让它的value加一
                if (!dic.Keys.Contains(str[i]))
                {
                    //不包含 则添加到字典中 并设置value为1
                    dic.Add(str[i], 1);
                }
              把这个地方改一下 就可以了
@wolfy:
string str = "AAAABBBBBBBCCCCCMMMMMMMNadcdfssAAAA";
 Dictionary<string, int> dic = new Dictionary<string, int>();
string tempString = string.Empty;
 string tempChar = string.Empty;
 for (int i = 0; i < str.Length; i++)
 {
 if (tempChar == str[i].ToString())
 {
 //tempString += str[i].ToString();
 }
 else
 {
 tempChar = str[i].ToString();
 if (!string.IsNullOrEmpty(tempString))
 {
 //如果key已经包含了某个字符 则不再添加 让它的value加一
 if (dic.Keys.Contains(tempString))
 {
 dic[tempString]++;
 }
 else
 {
 //不包含 则添加到字典中 并设置value为1
 dic.Add(tempString, 1);
 }
 tempString = string.Empty;
 }
 }
 tempString += tempChar;
 //最后一次循环的结果添加入字典
 if (i == str.Length - 1)
 {
 //如果key已经包含了某个字符 则不再添加 让它的value加一
 if (dic.Keys.Contains(tempString))
 {
 dic[tempString]++;
 }
 else
 {
 //不包含 则添加到字典中 并设置value为1
 dic.Add(tempString, 1);
 }
 }
 }
foreach (KeyValuePair<string, int> item in dic)
 {
 Console.WriteLine("{0}出现了{1}次", item.Key, item.Value);
 }
 Console.Read();
你应该这样想,字符串其实就是一个一个的字符拼接的,你把他还原成字符数组,使用linq的groupby 不就出来了
string str="aaabbbbbbbbccccccccccc";
char[] c=str.tochars();
后面linq的groupby
刚没看清,你要的是连续出现的次数,思路大致一样,转成字符数组,循环数组,取第一个比较,相同加一,不同时……呵呵,后面我想就不用我说了吧
我就说一下思路吧~最好呢就是先把这整个字符串排好序,那么所有相同的字符都会靠在一起,然后用一个for循环从第一个遍历,遇到一个新的字符开始为当前字符计数直到遇到新的另外一个字符,那么如此类推就可以得出答案了。