单词单复数转换函数
/// <summary>
/// 单词单复数转换函数,本函数对2个或2个字母以上单词有效
/// </summary>
/// <param name="world">待转换的单词</param>
/// <returns>返回一个长度为2的字符串数组,第一个值为单数单词,第二个为复数单词</returns>
public static string[] worldTransform(string world)
{
world = world.ToLower();//将单词转成小写形式
string vowel = "aoeiu";//声明元音字符串
int length = world.Length;//获取单词字符长度待用
string[] worlds = new string[2];//声明一个二维字符串数组
if (length == 1)
{
worlds[0] = world;//存储单词单数形式
worlds[1] = world;//存储单词复数形式
return worlds;
}
else
{
char last = world[length - 1];//取出单词最后一个字符待用
char last2 = world[length - 2];//取出单词倒数第二个字符待用
char last3 = ' ';
if (length >= 3)
last3 = world[length - 3];//取出单词倒数第三个字符待用
char last4 = ' ';
if (length >= 4)
last4 = world[length - 4];//取出单词倒数第四个字符待用
worlds[0] = world;//存储单词单数形式
worlds[1] = world;//存储单词复数形式
if (length == 1)
{
return worlds;
}
if (last != 's' || length <= 2)
{
//单词最后一个字母不为"s",则可判断为单数形式
switch (last)
{
case 'y':
if (vowel.IndexOf(last2) < 0)
{
worlds[1] = worlds[1].Substring(0, length - 1) + "i";
worlds[1] += "es";
}
else
worlds[1] += "s";
break;
case 'f':
worlds[1] = worlds[1].Substring(0, length - 1) + "v";
worlds[1] += "es";
break;
case 'e':
if (last2 == 'f')
{
worlds[1] = worlds[1].Substring(0, length - 2) + "ves";
}
else
worlds[1] += "s";
break;
case 'o':
worlds[1] += "es";
break;
case 'z':
worlds[1] += "es";
break;
case 's':
worlds[1] += "es";
break;
case 'x':
worlds[1] += "es";
break;
case 'h':
if (last2 == 'c' || last2 == 's')
worlds[1] += "es";
else
worlds[1] += "s";
break;
default:
worlds[1] += "s";
break;
}
return worlds;
}
else
{
if (last2 == 'e')
{
//单词最后两个字母为“es”,则可判断其为复数形式
if (last3 == 'z' || last3 == 'x' || last3 == 's' || last3 == 'h' || last3 == 'o')
worlds[0] = worlds[0].Remove(length - 2);
else if (last3 == 'i')
{
if (length >= 4)
{
if (vowel.IndexOf(last4) < 0)
{
worlds[0] = worlds[0].Remove(length - 2);
worlds[0] = worlds[0].Substring(0, length - 3) + "y";
}
else
worlds[0] = worlds[0].Remove(length - 2);
}
}
else if (last3 == 'v')
{
worlds[0] = worlds[0].Remove(length - 3);
worlds[0] += "f";//此步骤会产生误差。因为大多数的“f”、“fe”结尾单词中多以“f”结尾(还没有调查过),顾忽略“fe”。要避免误差只能用词库了。
}
else
{
worlds[0] = worlds[0].Remove(length - 1);
}
}
else
{
worlds[0] = worlds[0].Remove(length - 1);//此步骤误差最大,当单词最后一个字母为s时,很难判断它是复数还是单数,目前还没有找到判断的规律,估计要用到词库此才行。
}
return worlds;
}
}
}
http://www.cnblogs.com/smalltree/archive/2009/02/14/1390631.html
/// 单词单复数转换函数,本函数对2个或2个字母以上单词有效
/// </summary>
/// <param name="world">待转换的单词</param>
/// <returns>返回一个长度为2的字符串数组,第一个值为单数单词,第二个为复数单词</returns>
public static string[] worldTransform(string world)
{
world = world.ToLower();//将单词转成小写形式
string vowel = "aoeiu";//声明元音字符串
int length = world.Length;//获取单词字符长度待用
string[] worlds = new string[2];//声明一个二维字符串数组
if (length == 1)
{
worlds[0] = world;//存储单词单数形式
worlds[1] = world;//存储单词复数形式
return worlds;
}
else
{
char last = world[length - 1];//取出单词最后一个字符待用
char last2 = world[length - 2];//取出单词倒数第二个字符待用
char last3 = ' ';
if (length >= 3)
last3 = world[length - 3];//取出单词倒数第三个字符待用
char last4 = ' ';
if (length >= 4)
last4 = world[length - 4];//取出单词倒数第四个字符待用
worlds[0] = world;//存储单词单数形式
worlds[1] = world;//存储单词复数形式
if (length == 1)
{
return worlds;
}
if (last != 's' || length <= 2)
{
//单词最后一个字母不为"s",则可判断为单数形式
switch (last)
{
case 'y':
if (vowel.IndexOf(last2) < 0)
{
worlds[1] = worlds[1].Substring(0, length - 1) + "i";
worlds[1] += "es";
}
else
worlds[1] += "s";
break;
case 'f':
worlds[1] = worlds[1].Substring(0, length - 1) + "v";
worlds[1] += "es";
break;
case 'e':
if (last2 == 'f')
{
worlds[1] = worlds[1].Substring(0, length - 2) + "ves";
}
else
worlds[1] += "s";
break;
case 'o':
worlds[1] += "es";
break;
case 'z':
worlds[1] += "es";
break;
case 's':
worlds[1] += "es";
break;
case 'x':
worlds[1] += "es";
break;
case 'h':
if (last2 == 'c' || last2 == 's')
worlds[1] += "es";
else
worlds[1] += "s";
break;
default:
worlds[1] += "s";
break;
}
return worlds;
}
else
{
if (last2 == 'e')
{
//单词最后两个字母为“es”,则可判断其为复数形式
if (last3 == 'z' || last3 == 'x' || last3 == 's' || last3 == 'h' || last3 == 'o')
worlds[0] = worlds[0].Remove(length - 2);
else if (last3 == 'i')
{
if (length >= 4)
{
if (vowel.IndexOf(last4) < 0)
{
worlds[0] = worlds[0].Remove(length - 2);
worlds[0] = worlds[0].Substring(0, length - 3) + "y";
}
else
worlds[0] = worlds[0].Remove(length - 2);
}
}
else if (last3 == 'v')
{
worlds[0] = worlds[0].Remove(length - 3);
worlds[0] += "f";//此步骤会产生误差。因为大多数的“f”、“fe”结尾单词中多以“f”结尾(还没有调查过),顾忽略“fe”。要避免误差只能用词库了。
}
else
{
worlds[0] = worlds[0].Remove(length - 1);
}
}
else
{
worlds[0] = worlds[0].Remove(length - 1);//此步骤误差最大,当单词最后一个字母为s时,很难判断它是复数还是单数,目前还没有找到判断的规律,估计要用到词库此才行。
}
return worlds;
}
}
}