c#入门之枚举和结构体使用详解(控制台接收字符串以相反的方向输出)

枚举、结构
枚举的类型有限(short、byte...)且是相同的,在MSDN上找到枚举的一些示例,觉得这个还不错:

代码如下:

enum myWeekDay { Monday = 1, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };
int i = 3;
myWeekDay today = (myWeekDay)i;

枚举是需要先声明的,然后再通过新建一个变量(today)为枚举类型来使用。枚举默认的基本类型值从0开始,递增1,这叫等差数列。

枚举声明时,建议放在命名空间,当然,也可以放在类或结构中。将其它变量赋值给枚举类型时,需要强制转换,例如:today = (myWeekDay)myByte。当然,还有Enum.Parse(typeof(),)命令,就不具体研究了,用时再来看。

而结构(struct)就比较好用了,一个结构内支持不同基础数据类型。同样需要先声明结构,然后再声明变量为该结构类型,从而使用:

代码如下:

enum orientation : byte { north = 1, south = 2, east = 3, west = 4};
struct route
{
    public orientation direction;
    public double distance;
}

使用public:让调用该结构的代码可以访问该结构的成员。具体应用:

代码如下:

route myRoute;
int myDirection = -1;
double myDistance;
Console.WriteLine("1) North\n2) South\n3) East\n4) West");
do
{
    Console.WriteLine("请选择一个行驶方向:");
    myDirection = Convert.ToInt32(Console.ReadLine());
} while (myDirection < 1 || myDirection > 4);
Console.WriteLine("请输入一个距离:");
myDistance = Convert.ToDouble(Console.ReadLine());
myRoute.direction = (orientation)myDirection;
myRoute.distance = myDistance;
Console.WriteLine("指定方向 {0} 的距离是 {1}", myRoute.direction, myRoute.distance);

注意myRoute.direction = (orientation)myDirection这一行代码,应该是枚举的应用场景:只需要指明枚举值中的基本类型值i,再通过(enumName)i的方式,即可取得对应的字符串。

声明一个结构:route(创建的结构名) myRoute,再通过 myRoute.属性 的方式访问结构中的成员。

数组

印象中的数组总是比较复杂的东东。一个不错的例子:需要存储10个同学的姓名,使用数组即可简单解决,首先声明数组:

代码如下:

string[] friendNames = new string [arrayCount];
string[] friendNames = {"张三","李四","王五","谢六","陈七"};

第一行只初始化数组大小,可选 常数 或 常量,初始化后,才可使用friendNames[0]的方式为数组元素赋值。第二行直接声明数组,并且初始化了数组的内容。

可使用for循环,配合friendNames.Length的大小,来访问数组值,注意第1个元素的位置是0。也可使用foreach,并且不担心超出数组范围。foreach与for的区别在于,foreach是只读访问。

代码如下:

foreach (string myStr in friendNames)
{
    Console.WriteLine(myStr);
}

多维数组分为矩形数组(多行的每行元素个数相同)、锯齿数组(多行的每行元素个数不同,并可能存在 {列1{行1{层1,层2},行2},列2...}),当然,同样可以使用foreach的方式,取出所有元素的内容,多嵌套一个foreach即可:

代码如下:

int[][] jaggedIntArray = { new int[] { 1, 2, 3 }, new int[] { 4, 5 }, new int[] { 6, 7, 8, 9 }, new int[] {10, 11} };
foreach(int[] topArray in jaggedIntArray)
{
    foreach (int bottomArray in topArray)
    {
        Console.Write("{0} ", bottomArray);
    }
    Console.Write("\n");
}

注意:这儿用的都是[]或{},没有用()的方式哈,不要总写错括号,很低级。

字符串处理
这个就有意思多了。可以通过myString[1]的方式访问字符串中的每个字符,第1个字符位是0:

代码如下:

String myString = "  HeLlO WoRlD ";
char myChar = myString[1];

使用ToCharArray(),获取一个分解myString每个字符后的char数组:

代码如下:

char[] myChars = myString.ToCharArray();

还可以使用myString.Length获取字符串的数量,使用myString.ToLower()转为大写,myString.ToUpper()转为小写。注意:ToLower()、ToUpper()并不会改变变量本身的值的大小写,还需要用myString = myString.ToLower()才能修改变量本身的值。

myString.Trim()可以去掉字符串前、后的空格,还有TrimStart()和TrimEnd(),分别去掉前面和后面的空格。还可以使用Trim(myChar[])的方式,指定去除前后的内容不限于空格(char[] myChar = {' ','s'}):

代码如下:

myString = "  sfrost/110110200010101100-13090909880 ";
char mykg = ' ';
char[] myxhx = {'-','/'};
String[] myStrings = myString.Trim(mykg).Split(myxhx);
Console.WriteLine("myStrings[0] = {0}", myStrings[0]);
Console.WriteLine("myStrings[1] = {0}", myStrings[1]);
Console.WriteLine("myStrings[2] = {0}", myStrings[2]);

最近刚好在搞微信开发,在C#中,上面这个例子,就可以实现以一个(些)关键字分解用户输入的个人信息。例子中使用的Split()方法,同样的可以使用char数组来指明分解的标识。强调一下,Split分解字符串的位置可以是多个不同标记的位置。

结语
从这章开始,很多内容都可以马上做一些小的课题了,呵呵。不管是枚举(同类型)、结构(成员不同类型)、数组(一维、矩形[二维]、锯齿[不规则多维])、以及字符串处理,还有枚举与普通变量之间的值如何转换,数组如何声明、初始化和访问等等。而字符串的处理就太有意思了,特别是split,还有replace,再应用char数组,可以说是锦上添花啊。

附:习题案例

编写一个控制台应用程序,接收用户输入的字符串,将字符串的顺序以输入时相反的方向输出:

代码如下:

Console.WriteLine("请输入需要交换位置的字符串:");
String myString = Console.ReadLine().Trim();
Console.WriteLine("{0}", myString.Length);
String tmpStr = "";
for (int i = myString.Length; i > 0; i--)
{
    tmpStr += myString[i-1];
}
Console.WriteLine(tmpStr);

编写一个控制台应用程序,接收用户输入的字符串,用yes替换字符串中的所有no:

代码如下:

Console.WriteLine("请输入带有no的字符串:");
myString = Console.ReadLine().ToLower().Trim();
Console.WriteLine("用 yes 替换掉 {0} 中的 no 后:{1}", myString, myString.Replace("no", "yes"));

编写一个控制台应用程序,给字符串的每个单词加上引号(我以为,单词间肯定有空格):

代码如下:

Console.WriteLine("请输入带有空格的单词:");
String myWord = Console.ReadLine().Trim();
String[] myWords = myWord.Split(' ');
myWord = "";
foreach(String tmpWord in myWords)
{
    myWord += "\"" + tmpWord + "\" ";
}
Console.WriteLine("添加引号后的句子:{0}", myWord);

(0)

相关推荐

  • C#枚举中的位运算权限分配浅谈

    常用的位运算主要有与(&), 或(|)和非(~), 比如: 1 & 0 = 0, 1 | 0 = 1, ~1 = 0 在设计权限时, 我们可以把权限管理操作转换为C#位运算来处理. 第一步, 先建立一个枚举表示所有的权限管理操作: 复制代码 代码如下: [Flags] public enum Permissions { Insert = 1, Delete = 2, Update = 4, Query = 8 } [Flags]表示该枚举可以支持C#位运算, 而枚举的每一项值, 我们用2的

  • 理解C#中的枚举(简明易懂)

    一.在学习枚举之前,首先来听听枚举的优点. 1.枚举能够使代码更加清晰,它允许使用描述性的名称表示整数值. 2.枚举使代码更易于维护,有助于确保给变量指定合法的.期望的值. 3.枚举使代码更易输入. 二.枚举说明 1.简单枚举 ●枚举使用enum关键字来声明,与类同级.枚举本身可以有修饰符,但枚举的成员始终是公共的,不能有访问修饰符.枚举本身的修饰符仅能使用public和internal. ●枚举是值类型,隐式继承自System.Enum,不能手动修改.System.Enum本身是引用类型,继承

  • 深入理解C#中的枚举

    枚举类型是一种的值类型,它用于声明一组命名的常数. (1)枚举的声明:枚举声明用于声明新的枚举类型.访问修辞符 enum 枚举名:基础类型 复制代码 代码如下: {        枚举成员    } 基础类型必须能够表示该枚举中定义的所有枚举数值.枚举声明可以显式地声明 byte.sbyte.short.ushort.int.uint.long 或 ulong 类型作为对应的基础类型.没有显式地声明基础类型的枚举声明意味着所对应的基础类型是 int. (2)枚举成员枚举成员是该枚举类型的命名常数

  • 深入解析c#中枚举类型的定义与使用

    介绍枚举是一个指定的常数,其基础类型可以是除 Char 外的任何整型.如果没有显式声明基础类型,则使用 Int32.编程语言通常提供语法来声明由一组已命名的常数和它们的值组成的枚举. 定义默认基数从O开始,也可指定数值.enum Days { Saturday=1, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday };enum Colors { Red = 1, Green = 2, Blue = 4, Yellow = 8 }; 使用C

  • C# 遍历枚举类型的所有元素

    比如定义了一个错误的枚举类型 复制代码 代码如下: public enum eErrorDetailCode : int         {             登陆成功 = 0,             登出 = 1,             应用错误 = 2,             成功 = 16,             失败 = 17         } 需要引用 using System; 然后在循环中,遍历枚举对象的所有元素 复制代码 代码如下: foreach (int  m

  • C#实现获取枚举中元素个数的方法

    本文以一个简单实例讲述了C#实现获取枚举中元素个数的方法,对于C#学习来说是需要加以牢固掌握的技巧.分享给大家供大家参考之用.具体如下: 实现该功能可以使用枚举基类System.Enum的GetNames(Type t) 方法来获取某个枚举中的元素列表. 具体功能代码如下: enum EnumTest { type1, type2, } class Program { static void Main(string[] args) { EnumTest e = new EnumTest(); s

  • C# 获取枚举值的简单实例

    先申明一个枚举: 复制代码 代码如下: public enum Test_Enum        {            one = 1001, two = 1002, three = 1003, four = 1004, five = 1005, six = 1006, seven = 1007, eight = 1008, nine = 1009, zero = 1000        } 获取值: 复制代码 代码如下: object ojb = Enum.GetName(typeof(T

  • C#枚举数值与名称的转换实例分享

    首先建立一个枚举: 复制代码 代码如下: /// <summary>    /// 颜色    /// </summary>    public enum ColorType    {        /// <summary>        /// 红色         /// </summary>        Red, /// <summary>        /// 蓝色         /// </summary>      

  • C#中可枚举类型详解

    枚举是迭代一个集合中的数据项的过程. 我们经常使用的大多数集合实际上都已经实现了枚举的接口IEnumerable和IEnumerator接口,这样才能使用foreach迭代,有些是含有某种抽象了枚举细节的接口:ArrayList类型有索引,BitArray有Get方法,哈希表和字典有键和值..........其实他们都已经实现了IEnumerable和IEnumerator接口.所以一切的集合和数组都可以用IEnumerable或者IEnumerable<T>接口来定义. IEnumerabl

  • 关于c#中枚举类型支持显示中文的扩展说明

    复制代码 代码如下: AuditEnum.cs : public enum AuditEnum{ Holding=0,     Auditing=1, Pass=2, Reject=3      } 以asp.net为例 , 程序中某个方法可能会这样使用枚举值 :public void HandleAudit(int userID, AuditEnum ae){ if (ae==AuditEnum.Pass) { //do something } else if (ae==AuditEnum.R

随机推荐