一个面试题 简单的思路 字符串中字符循环排序
有一组字符串,它位于一台远程服务器上(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; }