本篇为我个人在写作业等时候经常用到的/好用的/我没掌握牢固的知识点/思路,自我总结一下,如有问题还请指正
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 + " ");
}