题目是这样的:有一个.txt文件,里面内容如下:banana|cat|Apple|Cat|apple
要求读取文件里的内容后对每个单词进行排序(banana cat Apple Cat apple)。
排序完成后成:Apple apple banana Cat cat (字母小的在前,如果有大小写,则大写在前)
其实就是一个简单的排序功能,只要对各个单词的ASCII码进行判断就可以了。要注意的是如果是大写字母需要转换一下。
简单的实现如下:
class Program
{
static void Main(string[] args)
{
StreamReader reader = new StreamReader("F:\\VS2010 projects\\CSharp\\CsdnTest.txt",Encoding.Default);
string str = reader.ReadToEnd(); //读取.txt文件内容
Console.WriteLine("Before Sort:" + str);
string[] strArr = str.Split('|');
SortString(strArr);
Console.WriteLine("After Sort:");
for (int i = 0; i < strArr.Length;i++ )
{
Console.Write(strArr[i] + " ");
}
}
// 使用冒泡排序
static void SortString(string[] strs)
{
for(int i = 0; i < strs.Length ; i++)
{
for(int j = 0; j< strs.Length - i -1 ; j++)
{
if(Compare(strs[j],strs[j + 1]) == 0)
{
string temp = "";
temp = strs[j];
strs[j] = strs[j + 1];
strs[j + 1] = temp;
}
}
}
}
static int Compare(string first,string second)
{
int s1 = 0, s2 = 0, res = 0,isUpper = 0;
for (int i = 0, j = 0; i < first.Length && j < second.Length; i++,j++ )
{
if (first[i] < 97)
{
s1 = first[i] + 32;
}
else
s1 = first[i];
if (second[j] < 97)
{
s2 = second[j] + 32;
isUpper = 1;
}
else
s2 = second[j];
if (s1 <= s2)
{
if (s1 == s2 && isUpper == 1)//如果单词一样,且第二个单词是大写的,则需要交换顺序
res = 0;
else
res = 1;
break;
}
else
{
res = 0;
break;
}
}
return res;
}
}