有一组字符串,它位于一台远程服务器上(http://kj.edu24ol.com/update/qa/qa1.txt),需要对它进行远程读取并按照规则进行逐行排序。排序规则:1. 字符规则(注意:区分大小写):j<a<G<g<8<r<D<f<U<b<W2. 最后一列(1,2,3,4,5)需出现在排序后的第一列3. 排序后输出的内容格式保持不变(即两两一组,以空格隔开)解答规则:1. 可使用C#/JavaScript,任意一种编程语言实现2. 提交分析思路,以文字形式表达3. 提交输出截图,程序编译完毕之后运行输出的内容(即排序后的结果)截图
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
题中的字符串如上面所示
明显这个文本里不止你排序规则里提到的那些字符,规则没有涉及到那些字符,怎么排序呢?还是说,除了这些字符意外,其他的字符按照普通ASCII字符排序规则?
http://bbs.csdn.net/topics/390307484
System.Net.WebClient client = new System.Net.WebClient();
byte[] getdata = client.DownloadData("http://kj.edu24ol.com/update/qa/qa1.txt"); string getString = System.Text.Encoding.UTF8.GetString(getdata); //分割数据
List<string> getSplitedArr = getString.Split(new string[] { "\r\n" }, StringSplitOptions.None).ToList();
List<string> getArr = new List<string>();
getSplitedArr.All(a =>
{
List<string> childArr = a.Split(' ').ToList();
//这里先把自由的数字1,2,3,4,5删除
childArr.RemoveAt(childArr.Count - 1);
getArr.AddRange(childArr);
return true;
}); //定义排序规则
Dictionary<char, int> diction = new Dictionary<char, int>();
diction.Add('j', 1);
diction.Add('a', 2);
diction.Add('G', 3);
diction.Add('g', 4);
diction.Add('8', 5);
diction.Add('r', 6);
diction.Add('D', 7);
diction.Add('f', 8);
diction.Add('U', 9);
diction.Add('b', 10);
diction.Add('W', 11);
//排序
getArr.Sort(new Comparison<string>(
(a, b) =>
{
if (!diction.ContainsKey(a[0]) || !diction.ContainsKey(b[0]))
{
return 0;
}
if (diction[a[0]] > diction[b[0]])
{ return 1; }
else if (diction[a[0]] < diction[b[0]])
return -1;
else
{
if (diction[a[1]] > diction[b[1]])
{
return 1;
} else if (diction[a[1]] < diction[b[1]])
{
return -1;
}
else
{
return 0;
}
}
})); //排序后再合并就可以了,省略
对得到的字符串以行为单位进行解析 去掉最后那个数字(这个数字要放最前面的)
j<a<G<g<8<r<D<f<U<b<W
dictionary<String,int> 这里的每个字母给对应一个数组(ArrayList[12])
int 对应ArrayList[]中的每个索引 ArrayList[11]对应其他字母 (除了上面有排序规则以外的)
遍历字符串(去掉空格和最后那个数字) 对号入座填入 ArrayList里 最后 按照数组顺序输出字符
最后数字+数组输出数字 然后两两格式化。
注:因为是面试题,所以有些字母不在排序规则里很可能是面试者给放的一个坎,我认为将他们都放在最后说明下即可。
{
static void Main(string[] args)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(@"http://kj.edu24ol.com/update/qa/qa1.txt"));
request.Method = "GET";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
using (StreamReader sr = new StreamReader(response.GetResponseStream()))
{
while(sr.Peek() > 0)
{
string line = sr.ReadLine().Trim();
int iLastSpace = line.LastIndexOf(" ");
string newLine = line.Substring(iLastSpace + 1) + " " + SortLine(line.Substring(0,iLastSpace));
Console.WriteLine(newLine);
}
}
Console.ReadLine();
} static string SortLine(string str)
{
string retStr = string.Empty;
int[] SortedArr = new int['z'-'0'+1];
foreach(char c in str)
{
if (c == ' ') continue;
SortedArr[c-'0']++;
}
int length = 0; for (int i = 0; i < SortedArr.Length;i++ )
{
while (SortedArr[i] > 0)
{
length++;
retStr += (char)(i + '0');
if (length==2)
{
retStr += " ";
length = 0;
}
SortedArr[i]--;
}
}
return retStr.Trim();
}
}
我以前去面试,遇到过这样一个变态的题:.net中唯一不继承自Object的类。 本来想写下这个类就是Object,但想了想你说Object没有继承自Object,那我也可以说Object继承了Object,它自己有他自己的所有属性与方法。所以我就什么也没有写。。后来那公司人事部的人就直接让我走了,没让技术部的人面。
甚至后来我也怀疑是不是我自己错了,.net中确实存在一个这样的类。
就当它是abcde...好了
只不过这里j=a a=b G=c 这样子这里元素是有限个的,所以我觉得可以用桶式排序来写
2 22 57 7a ag rD AB IY cc cd iu
3 11 26 ag WA AF FQ ST Tc eh nu
4 11 12 5G gU WW BE ES TY dh pt
5 00 11 12 33 45 6G fF FR Rd de----------------------
1 yw pk kB Bb bU f8 GG a6 51 11
2 ui dc cc YI BA Dr ga a7 75 22
3 un he cT TS QF FA AW ga 62 11
4 tp hd YT SE EB WW Ug G5 21 11
5 ed dR RF Ff G6 54 33 21 11 00原来是同一家公司,以上我做的结果
就理解成单纯的字符提序,字符串,字典
很想知道那个类是什么~~
别跟我说是Object就行~