A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 秦二江 中级黑马   /  2013-5-20 08:53  /  1959 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 秦二江 于 2013-5-24 06:36 编辑

// 去掉重复字符
Console.WriteLine("请输入");
            // 1. 接收用户输入
            string str = Console.ReadLine();
            //2. 将用户输入 转换成 char 数组
            char[] strchar = str.ToCharArray();
            //3. 定义一个 字典集合 用来接收 去掉用户输入的重复 的字符 后的 字符  
            Dictionary<int, char> dic = new Dictionary<int, char>();
            //4. 用循环 来让前面 的字符 跟 后面的字符 依次相比 一直到最后一个
            for (int i = 0; i < strchar.Length; i++)
            {
                //5. 在 char 下标 范围内 执行 if 结构
                if ((i + 1) < strchar.Length)
                {
                    //6. 一开始 就有 连续相等( 像   wwwwfedf 这样 )
                    if (strchar == strchar[i + 1])
                    {
                        //7. 跳过 本次循环,从第二个字符开始 再次循环 即 跳到 4.
                        continue;
                    }
                }

                // 执行到这里 说明 前面没有 相等 ( wwwfedf    即执行到 该让 w 一次于后面的字符相比    )
                for (int j = i + 1; j < strchar.Length; j++)
                {
                    // 如果 后面仍然有相等的 则执行 if 结构
                    if (strchar == strchar[j])
                    {
                        // 有相等 ,跳到 aa 标签处 结束 这个子符的 相比  
                        goto aa;

                    }


                }

                //( 即 我想取  重复字符中 的最后一个 ,最后一个才会添加 到集合 中)
                dic.Add(i, strchar);

            aa: ;

            }

            // 去掉 重复字符 后 的所有字符 都被添加到 字典集合中了,现在遍历 字典集合 ,输出到控制台
            foreach (KeyValuePair<int, char> w in dic)
            {
                Console.Write(w.Value);
            }

            Console.ReadKey();

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

2 个回复

正序浏览
本帖最后由 郎吉祥 于 2013-5-20 12:29 编辑

  for (int i = 0; i < strchar.Length-1; i++)
            {
                if (strchar == strchar[i + 1])
                {
                    if (i+1== strchar.Length - 1)
                    {
                        dic.Add(i+1, strchar[i+1]);
                    }
                    continue;
                }
                dic.Add(i, strchar);
             if (i + 1 == strchar.Length - 1)
                {
                    dic.Add(i + 1, strchar[i + 1]);
                }
            }
            我把2个for循环改了。这样就可以了。完全没必要用到goto这么麻烦,

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
  1.            for (int i = 0; i < strchar.Length; i++)
  2.             {
  3.                 //5. 在 char 下标 范围内 执行 if 结构
  4.                 if ((i + 1) < strchar.Length)
  5.                 {
  6.                     //6. 一开始 就有 连续相等( 像   wwwwfedf 这样 )
  7.                     if (strchar == strchar[i + 1])
  8.                     {
  9.                         //7. 跳过 本次循环,从第二个字符开始 再次循环 即 跳到 4.
  10.                         continue;
  11.                     }

  12.                 }

  13.                 // 执行到这里 说明 前面没有 相等 ( wwwfedf    即执行到 该让 w 一次于后面的字符相比    )
  14.                 for (int j = i + 1; j < strchar.Length; j++)
  15.                 {
  16.                     // 如果 后面仍然有相等的 则执行 if 结构
  17.                     if (strchar != strchar[j])
  18.                     {
  19.                        //( 即 我想取  重复字符中 的最后一个 ,最后一个才会添加 到集合 中)
  20.                 dic.Add(i, strchar);

  21.                     }


  22.                 }

  23.                
  24.            
  25.             }

复制代码
不知道这样行不行

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马