一个面试题 简单的思路 字符串中字符循环排序

有一组字符串,它位于一台远程服务器上(http://kj.edu24ol.com/update/qa/qa1.txt),需要对它进行远程读取并进行逐行排序。

排序规则:

a)     其中部分字符规则为(注意:区分大小写):j<a<G<g<8<r<D<f<U<b<W,其它字符规则保持不变

b)     倒序/正序皆可,但最后一列(1,2,3,4,5)需出现在排序后的第一列

c)      排序后输出的内容格式保持不变(即两两一组,以空格隔开)

解答规则:

a)     可使用C#/JavaScript/Objective-C,任意一种编程语言实现

b)     此题为开放性题目,没有标准答案,请按照自己思路解答

c)      提交分析思路,以文字形式表达

d)     提交输出截图,程序编译完毕之后运行输出的内容(即排序后的结果)截图

e)     提交程序源码,对必要代码行进行注释

f)      所有需要提交的内容需包含在一封邮件里面,并注明自己的名字,以便后续面试中沟通使用

远程内容:

w1 b1 Bb Ba 5f 6G kk 1p UG 8y 1

aY 7A a5  B7 cc Dc 22 ui Id rg 2

nc 2e Fa AA TF g1 uh WS Q1 6T 3

gt TY UB W1 1d pG 5h EE 12 WS 4

05 61 31 RG de 01 4R FF 23 fd 5

 

 

解题思路:

1.读取txt文件
2.循环文件中每一行数据
3.定义比较字符串 按照优先级  正序倒序看你怎么排啦
4.循环每行数据的字符串  即获得字符
5.该字符与定义的字符串比较 若存在 则按照索引保存到数组中 [需要注意的是要处理排序规则:b 选项 这里我是在比较字符串前面增加了一个空格;处理非比较字符 则数组个数多加一个 具体看代码]
6.处理完毕后 循环数组 获得排序后的新字符串
7.排序规则:c 选项处理  俩俩匹配
8.换行,输出到前台 ok~
 
开始做 时间比较紧张 简单些了下~  肯定还可以优化 或者有更好的方法
后台代码如下,前台就算了
 
 //将txt文件下载到本地  前台有html读取的方法  这里不做处理
        //读取txt文件
        StreamReader sr = new StreamReader("D:\\1.txt");
        //定义需要比较的字符集
        string compare = " jaGg8rDfUbW";
        string outstring1 = "";
        //循环每一行数据
        try
        {
            while (true)
            {
                string sdata = sr.ReadLine().Trim().Replace(" ", "");
                string[] dbcom = new string[compare.Length + 1];
                string outstring = "";
                //循环每行字符串每个字符
                for (int i = 0; i < sdata.Length - 1; i++)
                {
                    //按照顺序循环取字符
                    string bdata = sdata.Trim().Substring(i, 1);
                    //若存在需要排序的字符 则按照字符串数组索引保存
                    if (compare.IndexOf(bdata) >= 0)//比较
                    {
                        dbcom[compare.IndexOf(bdata) - 1] += bdata;
                    }
                    else
                        dbcom[compare.Length] += bdata;
                    if (i == sdata.Length - 2)
                    {
                        dbcom[0] = sdata.Trim().Substring(i + 1, 1);
                    }
                }
                //重新整理排序后的字符串
                for (int h = 0; h <= compare.Length; h++)
                {
                    outstring += dbcom[h];
                }
                //按照要求两两一组                 
                for (int i = 0; i < outstring.Length; i++)
                {
                    outstring1 += outstring[i];
                    if (i % 2 == 0)
                        outstring1 += " ";
                }
                if (!string.IsNullOrEmpty(outstring1))
                {
                    outstring1 += "\r\n";
                }
                if (string.IsNullOrEmpty(sdata))
                    break;
            }
        }
        catch (Exception ex)
        {
            this.tbhome.InnerText = ex.Message.ToString();
        }
        finally
        {
            this.tbhome.InnerText = outstring1;
        }

 

 

 

 

posted on 2013-11-25 15:03  小小文豪  阅读(696)  评论(0编辑  收藏  举报

导航