C# 典型案例/纯写代码的笔记 个人复习用 -1

本篇为我个人在写作业等时候经常用到的/好用的/我没掌握牢固的知识点/思路,自我总结一下,如有问题还请指正

1. 从键盘循环接收字符串,并换行逆序显示;当用户直接回车时,结束;

本案例包含:
一直从键盘接受字符串,当用户输入回车时结束的while-break
将用户输入得到的string分割成char类型数组,再逆序,最后一个一个输出
由于我们输入的是string,而不是string数组,所以在此拆分成char数组,方便直接进行Array.Reverse()进行逆序输出操作

			//一直从键盘接受字符串,当用户输入回车时结束的框架
            string a;
            while(true)
            {
                Console.Write("请输入一个字符串:");
                a = Console.ReadLine();

                if (a == "")
                {
                    break;
                }
				
				//由string拆分成char类型数组了
                char[] ch = a.ToArray();
                Array.Reverse(ch, 0, a.Length);//数组逆序函数
                Console.Write("逆序后的字符串为:");

                foreach (char i in ch)
                {
                    Console.Write(i);
                }
                Console.WriteLine();  
            }

2. 验证输入是否为空

string.IsNullOrEmpty(n)

			string n = Console.ReadLine();
            for(int i=0;i<10;i++)
            {
                if (string.IsNullOrEmpty(n))
                {
                    Console.WriteLine("不可输入为空");
                    i--;
                }
            }

3. 不用bool bx = int.TryParse(xstr, out x2);而用try catch来判定

			int[] a = new int[10];
            for (int i = 0; i < 10; i++)
            {
                try
                {
                    a[i] = int.Parse(n);
                }
                catch
                {
                    Console.WriteLine("非法输入");
                    i--;
                    continue;
                }

            }

4. 从键盘循环接收字符串,计算其中的单词个数,并逐单词逆序显示,假定单词之间以空格为分隔符;

本案例包含:
判断是否为标点char.IsPunctuation(b[i]),是则全变成空格
去除空数据操作

			string a;
            while(true)
            {
                Console.Write("请输入一个字符串:");
                a = Console.ReadLine();

                if (a == "")
                {
                    break;
                }

                char[] b = a.ToArray();
                int count = 0;//用于计算非字母的个数
                for (int i = 0; i < b.Length; i++)
                {
                    if (char.IsPunctuation(b[i]))
                    {
                        b[i] = ' '; //是标点则化为空格
                    }
                }

                a = new string(b);
                //去除空数据
                string[] word = a.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
                Console.WriteLine("该字符串中共有{0}个单词。", word.Length);
                Array.Reverse(word);

                Console.Write("逆序之后的字符串为:");
                foreach (string i in word)
                {
                    Console.Write(i + " ");
                }
                Console.WriteLine();


            }

5. 从键盘循环接收字符串,判断其是否可以转换成日期,若可以则以长格式显示(“**** 年** 月** 日”),若不可以则显示提示信息。

本案例包含:
日期DateTime类和string的转换与输出
DateTime.TryParse(a, out DT)
DT.ToString(“yyyy年MM月dd日”)

            DateTime DT;
            string a;
            while (true)
            {
                Console.Write("请输入一个日期字符串:");
                a = Console.ReadLine();
                if (a == "")
                    break;
                if (DateTime.TryParse(a, out DT))
                {
                    Console.WriteLine(DT.ToString("yyyy年MM月dd日"));
                }
                else
                {
                    Console.WriteLine("输入字符串不能转化为日期");
                }             
            }

6. 随机生成一个 100~999 之间的整数,将该整数的个位、十位、百位的值相加,显示其值;

本案例包含:
随机数赋值范围是这样的[a,b)
个位十位百位相加
百位a/100
十位(a/10)%10
个位a%10

			Random random = new Random();
            int a, ans;
            for (int i = 0; i < 10; i++)
            {
                a = random.Next(100, 1000);
                ans = (a / 100) + (a / 10) % 10 + a % 10;
                Console.WriteLine($"随机生成的3位整数是{a},其数位和为{ans}");
            }

7.创建一个 byte 类型的数组,数组长度由用户输入指定,并使用随机数填充该数组;

本案例包含:
byte数组
random一次性可以给一整个数组赋值:random.NextBytes(arr);

			Console.Write("请输入数组长度:");
            byte[] arr = new byte[int.Parse(Console.ReadLine())];

            Random random = new Random();
            random.NextBytes(arr);

            Console.Write("随机数填充后的数组为:");
            foreach (byte i in arr)
            {
                Console.Write(i + " ");
            }

8.从键盘接收一个字符串,显示字符串的长度,并查找该串中是否存在字母 A(无论大小写),若不存在,则将大写字母 A 插入到串首位置,并显示新串。

本案例包含:
字符串中是否含有某字符a.Contains(“a”)
插入操作a = a.Insert(0, “A”);

			string a;
            while (true)
            {
                Console.Write("请输入一个字符串:");
                a = Console.ReadLine();
                if (a == "")
                    break;
                Console.WriteLine($"字符串长度为:{a.Length}");
                if (a.Contains("a") || a.Contains("A"))
                {
                    Console.WriteLine("该字符串中存在a or A字符");
                }
                else
                {
                    a = a.Insert(0, "A");
                    Console.WriteLine($"在首位插入A后的字符串为:{a}");
                }
            }

9. 从键盘接收一个字符串,统计数字字符出现的次数,并显示每次出现的位置;

本案例包含:
ans.Add(Array.IndexOf(b, b[i], i) + 1);
Array.IndexOf()方法用于返回一个数组中元素的角标

			string a;
            int count = 0;
            List<int> ans = new List<int>();

            Console.WriteLine("请输入一个字符串:");
            a = Console.ReadLine();

            char[] b = a.ToCharArray();
            for (int i = 0; i < b.Length; i++)
            {
                if (char.IsDigit(b[i]))
                {
                    ans.Add(Array.IndexOf(b, b[i], i) + 1);
                    count++;
                }
            }
            Console.WriteLine($"数字字符出现的次数为:{count}");

            Console.WriteLine("所处位置分别为:");
            for (int i = 0; i < ans.Count; i++)
            {
                Console.Write(ans[i] + " ");
            }

10. 从键盘接收一个字符串,将其中的所有数字字符去除后

同样也是用来将读来的string转换为char数组,再新来一个list,用作筛除后的新的,往里面添加就好

			string a;
            Console.WriteLine("请输入一个字符串:");

            a = Console.ReadLine();
            char[] b = a.ToCharArray();
            List<char> ans = new List<char>();

            for (int i = 0; i < b.Length; i++)
            {
                if (!char.IsDigit(b[i]))
                {
                    ans.Add(b[i]);
                }
            }

10.从键盘接收一个字符串,将字符串中的子串“ab”替换为“cd”,显示替换前后的字符串,并显示替换的次数。

这里应用了比string.Split 丰富的Regex.Split

			while (true)
            {
                Console.WriteLine("请输入一个字符串:");
                string a = Console.ReadLine();
                int count = 0;
                
                if (a == "")
                {
                	break;
                }
                   
                if (a.Contains("ab"))
                {
                    string[] arr = Regex.Split(a, "ab");
                    count = arr.Length - 1;
                    a = string.Join("cd",arr);
                    
                    Console.WriteLine($"将ab替换成cd之后的字符串为:{a}");
                    Console.WriteLine($"共替换了{count}次");
                }
                else
                {
                    Console.WriteLine("原字符串中没有ab字符");
                }
            }

11. 显示一个数组的最大值

 			Array.Sort(a);
            int max = a[a.Length-1];

12. 从键盘循环接收一个字符串,输入空串时退出循环。对接收的字符串执行以下操作:

(1)统计字符串中数字字符出现的次数以及每次出现的位置。

(2)将字符串中的所有字符按照原顺序用大写字母构成新的字符串,并输出。

我自己写的话,很容易在“添加每次出现的位置”做两个循环,导致出错
这里可以直接ArrayList了个Num_Place,然后if判断出来了之后,直接Num_Place.Add(i+1);
不会出错

while (true)
            {
                Console.Write("请输入一个字符串:");
                string a = Console.ReadLine();
                int count = 0;
                
                if (a == "")
                {
                	break;
                }
                    
                a = a.ToUpper();
                char[] chr = a.ToCharArray();
                
                ArrayList Num_Place = new ArrayList();
                for (int i = 0; i < a.Length; i++)
                {
                    if (char.IsDigit(chr[i]))
                    {
                        Num_Place.Add(i+1);
                        count++;                       
                    }
                }
                
                Console.Write($"数字出现的次数为{count},分别位于:");
                foreach (int i in Num_Place)
                {
                	Console.Write(i + " ");
                }
                                 
                Console.Write("\n将字符串中的字符转换成大写为:");
                foreach (char i in chr)
                {
                	Console.Write(i);
                }
                
            }

13. int类型的数组,可以直接a.Average()/Min()/MAX()的,不用再转换或者计算了

14.请编写一个控制台程序,实现以下功能:

(1)随机生成一个整数 n,要求 n 在 1~100 之间(包含 1、100)。

(2)输出 1~n 之间所有的奇数、偶数、3 的倍数。

此案例可以很好地体现出List< int >的方便

            Random random = new Random();
            int n = random.Next(1,100);
            
            List<int> Even_Num_List = new List<int>();
            List<int> Odd_Num_List = new List<int>();
            List<int> Mul_Three_List = new List<int>();
            
            Console.WriteLine($"随机生成的n为:{n}");
            for (int i = 1; i <= n; i++)
            {
                if (i % 2 == 0)
                {
                	Even_Num_List.Add(i);
                }   
                if (i % 3 == 0)
                {
                    Mul_Three_List.Add(i);
                }
                if (i % 2 != 0)
                {
                    Odd_Num_List.Add(i);
                }
            }
            
            Console.Write($"1——{n}的偶数为:");
            foreach (int i in Even_Num_List)
            {
                Console.Write(i + " ");
            }
            Console.Write($"\n1——{n}的奇数为:");
            foreach (int i in Odd_Num_List)
            {
                Console.Write(i + " ");
            }
            Console.Write($"\n1——{n}中3的倍数为:");
            foreach (int i in Mul_Three_List)
            {
                Console.Write(i + " ");
            }

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值