题目:写一个函数,要求有2个参数,1个为字符串,1个为字节数,返回截取的字符串。
要求字符串中的中文不能出现乱码:如(“我ABC”,4)应该截为"我AB",输入(“我ABC汉DEF”,6)应该输出为“我ABC”而不是“我ABC+汉的半个”。
主要代码如下:
class Program
{/*写一个函数,2个参数,1个字符串,1个字节数,返回截取的字符串,要求字符串中的中文不能出现乱码:
如(“我ABC”,4)应该截为“我AB”,输入(“我ABC汉DEF”,6)应该输出为“我ABC”而不是“我ABC+汉的半个”。*/
/// <summary>
/// 截取字符串的方法
/// </summary>
/// <param name="str"></param>
/// <param name="index"></param>
/// <returns></returns>
public static string SubString(string str, int index)
{
int length = 0;
//用来存储截取的字符串
string strWords = "";
for (int i = 0; i < str.Length; i++)
{
//判断字符串的长度是否小于要截取的长度
if (length < index)
{
//在ASCII码表中,英文的范围是0-127,而汉字则是大于127
//判断是否为汉字
if ((int)str[i] > 127)
{
//判断汉字是否为最后一个字符
if (index - length > 1)
{
length += 2;
strWords += str[i];
}
else
{
//最后一个字符为汉字,字符串长度加1,字符舍去
length += 1;
}
}
else //不是汉字
{
length += 1;
strWords += str[i];
}
}
}
return strWords;
}
static void Main(string[] args)
{
Console.WriteLine("请输入一句话:");
string input = Console.ReadLine();
Console.WriteLine("请输入要截取的位数:");
int total = Convert.ToInt32(Console.ReadLine());
//截取字符串
string SubStringWords = SubString(input, total);
Console.WriteLine(SubStringWords);
Console.ReadKey();
}
}
本做法虽然麻烦,但思路清晰。
class Program
{/*写一个函数,2个参数,1个字符串,1个字节数,返回截取的字符串,要求字符串中的中文不能出现乱码:
如(“我ABC”,4)应该截为“我AB”,输入(“我ABC汉DEF”,6)应该输出为“我ABC”而不是“我ABC+汉的半个”。*/
/// <summary>
/// 截取字符串的方法
/// </summary>
/// <param name="str"></param>
/// <param name="index"></param>
/// <returns></returns>
public static string SubString(string str, int index)
{
int length = 0;
//用来存储截取的字符串
string strWords = "";
for (int i = 0; i < str.Length; i++)
{
//判断字符串的长度是否小于要截取的长度
if (length < index)
{
//在ASCII码表中,英文的范围是0-127,而汉字则是大于127
//判断是否为汉字
if ((int)str[i] > 127)
{
//判断汉字是否为最后一个字符
if (index - length > 1)
{
length += 2;
strWords += str[i];
}
else
{
//最后一个字符为汉字,字符串长度加1,字符舍去
length += 1;
}
}
else //不是汉字
{
length += 1;
strWords += str[i];
}
}
}
return strWords;
}
static void Main(string[] args)
{
Console.WriteLine("请输入一句话:");
string input = Console.ReadLine();
Console.WriteLine("请输入要截取的位数:");
int total = Convert.ToInt32(Console.ReadLine());
//截取字符串
string SubStringWords = SubString(input, total);
Console.WriteLine(SubStringWords);
Console.ReadKey();
}
}