字符串 StringBuilder 重载 递归

字符串

Person p1 = new Person();
Person p2 = new Person();
这两句话肯定会在堆里开辟两个空间存储
string str = "abc";
str = "abcd"; 
这句话本身string 已经复制abc了,然后我又改了str的值 那先前的abc就没用了,就会进入垃圾回收机里(C#封装了看不到的)

正常的话肯定会开辟多个空间,用不到的字符串就会过段时间清除,但是经过特殊手段的字符串就不一样了

string str1 = "abc"; 
string str2 = ”abc"; 
这俩在值类型里存的地址都指向在堆里开辟的同一个,他发现因为字符串内容一样,就同时指向同一个,这样的字符串是不能更改的
这种的字符串占得内存是死的

字符串可以当做字符数组使用

string str = "abc";
Console.WriteLine(str[0]);//'a' 
当把字符串当做数组使用时 数据类型回事char
只能读不能修改

string提供的方法(常用的)

static void Main(string[] args){
    //随便创建一个字符串 有大写 有小写
    string str = "ABCdef";
    //Compare 比较字符串内容 判断字符是否相等
    //这个方法是一个字符一个字符的去比较,直到比较到字符不一样的。
    //相等打印0,不相等的话会比较一下 Ascii 码 编号大返回1 编号小返回-1
    int n = string.Compare(str,"ABCdef");
    Console.WriteLine(n);
}
static void Main(string[] args){
    //随便创建一个字符串 有大写 有小写
    string str = "ABCdef";
    //Contains 判断在str这个字符串里是否包含 这个"内容" 如果完全一样(大小也算)
    // 一样返回true,不一样返回false
    bool b = string.Contains("bc");
    Console.WriteLine(b);//结果false 因为大小写不一样
}
static void Main(string[] args){
    //随便创建一个字符串 有大写 有小写
    string str = "ABCdef";
    //Remove 虽然他提供了删除的方法,但是他的内部也是新创了一个然后给你返回过来
    //删除索引
    //长度
    str = str.Remove(3,1);
    Console.WriteLine(str);
}
static void Main(string[] args){
    //随便创建一个字符串 有大写 有小写
    string str = "ABCdef";
    //Concat 合并  这种合并相当于Console.WriteLine("abc" + "def" + "aaaa");
    str = string.Concat("abc","def","aaaa");
    Console.WriteLine(str);
}
static void Main(string[] args){
    //随便创建一个字符串 有大写 有小写
    string str = "ABCdef";
    //CopyTo 拷贝 拷贝字符数组
	Char[] cs = new char[10];  
    //拷贝的字符串起始索引
    //目标字符数组
    //目标索引 	
    //长度
    str.CopyTo(1,cs,0,3);
    cs[1] = 'z'; //也可以修改
    Console.WriteLine(cs);
}
Format

string str1 =string.Format("{0:N1}",56789);//result: 56,789.0
string str2 =string.Format("{0:N2}",56789);//result: 56,789.00
string str3 =string.Format("{0:N3}",56789);//result: 56,789.000
string str8 =string.Format("{0:F1}",56789);//result: 56789.0
string str9 =string.Format("{0:F2}",56789);//result: 56789.00
string.Format("{0:C}",0.2) 结果为:¥0.20 (英文操作系统结果:$0.20)
string.Format("{0:D3}",23) //结果为:023
string.Format("{0:P}", 0.24583) //结果为:24.58% (默认保留百分的两位小数)
string.Format("{0:P1}", 0.24583) //结果为:24.6% (自动四舍五入)
static void Main(string[] args){
    //随便创建一个字符串 有大写 有小写
    string str = "ABCdef";
    //IndexOf 查找字符串返回索引
    //这个查找是返回的第一个字的索引号  比如 ABC返回的就是0 因为A是0
    n = str.IndexOf("BC");
    Console.WriteLine(n);//返回的数字是1
}
static void Main(string[] args){
    //随便创建一个字符串 有大写 有小写
    string str = "ABCdef";//这个字符串当中第一次出现的
    //IndexOfAny 查找任意字符串返回索引
    n = str.IndexOfAny(new char[] {'e','B'});//顺序不重要
    Console.WriteLine(n);//返回的数字是1 (B)
}
static void Main(string[] args){
    //随便创建一个字符串 有大写 有小写
    string str = "ABCdef";
    //Insert 插入
    //索引
    //内容
    str = str.Insert(1,"110");
    Console.WriteLine(str);
}
static void Main(string[] args){
    //String.Join 合并字符串数组
    //分隔符
    //字符串
    str = string.Join(',',new string[] {"abc","bcd","def"});
    Console.WriteLine(str);
}
static void Main(string[] args){
     //随便创建一个字符串 重复的bc
    string str = "abcdebc";
    //LastIndexOf 查找字符串,返回最后一次出现的索引
    n = str.LastIndexOf("bc");
    Console.WriteLine(n);//结果是5
}
static void Main(string[] args){
     //随便创建一个字符串 
    string str = "abcde";
    //PadLeft 左侧填充空格
    str = str.PadLeft(10);
    Console.WriteLine(str);
}
static void Main(string[] args){
     //随便创建一个字符串 
    string str = "abcde";
    //Replace 替换
    str = str.Replace("bc","00");
    Console.WriteLine(str);
}
static void Main(string[] args){
    //随便创建一个字符串 
    string str = "abc,def,efg";
    //Split 拆分
    string[] strs = str.Split(',');
    Console.WriteLine(strs[1]);
}
static void Main(string[] args){
    //随便创建一个字符串 
    str = "abcde";
    //Substring 截取子字符串 
    //索引 
    //长度
    str = str.Substring(1,3);
    Console.WriteLine(str);
}
static void Main(string[] args){
    //随便创建一个字符串 有大写 有小写
    str = "ABCdef";
    //ToLower 转成小写
    str = str.ToLower();
    //ToUpper 转成大写
    //str = str.ToUpper();
    Console.WriteLine(str);
}
static void Main(string[] args){
    //随便创建一个字符串 有大写 有小写 有空白
    str = "			ABCdef			";
    //Trim 删除首位空白
    str = str.Trim();
    Console.WriteLine(str);
}

StringBuilder

//使用前要引用using System.Text;命名空间
//使用时需要new下,这样就在原来有的字符串上添加了
StringBuilder strBuilder = new StringBuilder("你");//实例化 赋初值
//增加
strBuilder.Append("好!");
//插入
strBuilder.Insert(1,"0000");
//删除
strBuilder.Remove(1, 4);
//替换
strBuilder.Replace("!", "?");
//输出的类型不同 这两种结果都是一样的
Console.WriteLine(strBuilder);
Console.WriteLine(strBuilder.ToString());

重载

重载是方法名相同,参数不同,调用方法时根据你传的参数,选择它所提供的方法

参数不同是指以下几种情况:
1、参数的类型不同
2、参数的个数不同
3、参数的个数和类型都不同
public void Print(int data)
{
    Console.WriteLine(data);
}
public void Print(float data)
{
    Console.WriteLine(data);
}
public void Print(int data, int source)
{
    Console.WriteLine(data + source);
}
public int Print(int data, float dataa)
{
    return 1;
} 

方法递归

自己(方法)调用 自己(方法)要记得给出口

方法A 调用 方法B 方法B 调用 方法A 也要记得给出口

/*
斐波那契数列
0,1,1,2,3,5,8,13,21,34,55,89,144 ······
*/

//方法
static void Test1(int a,int b){
    //前面的数加上后面的数等于c   <-----核心的逻辑 
    int c = a + b;
    //如果c 小于300         <-----这个是递归的出口
    if(c < 300){
        //打印
        Console.WriteLine(c);
        //调用自己           <-----自己调用自己
        Test1(b,c);
    }
}

static void Main(string[] args){
    //调用Test1
    Test1(0,1);
}

例子

/*
(1)n个桃,每过一天吃1/2+1个,7天后剩一个,原来有几个桃?
(2)写一个递归方法,计算敌人满血66666每次被攻击39,几次攻击
	杀死敌人。
*/

//(1)每过一天要吃1个半的桃子 第七天就剩了一个桃子 可以反着推出 7 * 1.5 + 1 = 11.5 个桃子
//方法
static void Test1(int day,float num){
   //如果天数大于0
   if(day > 0){    			<-----这个是递归的出口
       //天数-1 桃子数+1.5
       Test1(day - 1,num + 1.5f);             <-----核心的逻辑 
   }//否则
   else{
       //打印桃子数
       Console.WriteLine(num);
   }
}

static void Main(string[] args){
    //调用Test1
    Test1(7,1);//第7天就剩1个桃子
}
————————————————————————————————————————————————————————————————————————————————————————————————————————————
//(2)
//计数器
static int a = 0;
//方法
static void Test2(int hp){
   //声明一个临时的攻击变量
   int atk = 39; 
   //如果血量大于0
   if(hp > 0){
       //计数器++
       a++;
       //递归
       Test2(hp - atk);
   }//否则
   else{
       打印结果
       Console.WriteLine(a);
   }
}

static void Main(string[] args){
    //调用Test2
    Test2(66666);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值