c#入門之枚舉和結(jié)構(gòu)體使用詳解(控制臺(tái)接收字符串以相反的方向輸出)
枚舉、結(jié)構(gòu)
枚舉的類型有限(short、byte...)且是相同的,在MSDN上找到枚舉的一些示例,覺(jué)得這個(gè)還不錯(cuò):
enum myWeekDay { Monday = 1, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };
int i = 3;
myWeekDay today = (myWeekDay)i;
枚舉是需要先聲明的,然后再通過(guò)新建一個(gè)變量(today)為枚舉類型來(lái)使用。枚舉默認(rèn)的基本類型值從0開始,遞增1,這叫等差數(shù)列。
枚舉聲明時(shí),建議放在命名空間,當(dāng)然,也可以放在類或結(jié)構(gòu)中。將其它變量賦值給枚舉類型時(shí),需要強(qiáng)制轉(zhuǎn)換,例如:today = (myWeekDay)myByte。當(dāng)然,還有Enum.Parse(typeof(),)命令,就不具體研究了,用時(shí)再來(lái)看。
而結(jié)構(gòu)(struct)就比較好用了,一個(gè)結(jié)構(gòu)內(nèi)支持不同基礎(chǔ)數(shù)據(jù)類型。同樣需要先聲明結(jié)構(gòu),然后再聲明變量為該結(jié)構(gòu)類型,從而使用:
enum orientation : byte { north = 1, south = 2, east = 3, west = 4};
struct route
{
public orientation direction;
public double distance;
}
使用public:讓調(diào)用該結(jié)構(gòu)的代碼可以訪問(wèn)該結(jié)構(gòu)的成員。具體應(yīng)用:
route myRoute;
int myDirection = -1;
double myDistance;
Console.WriteLine("1) North\n2) South\n3) East\n4) West");
do
{
Console.WriteLine("請(qǐng)選擇一個(gè)行駛方向:");
myDirection = Convert.ToInt32(Console.ReadLine());
} while (myDirection < 1 || myDirection > 4);
Console.WriteLine("請(qǐng)輸入一個(gè)距離:");
myDistance = Convert.ToDouble(Console.ReadLine());
myRoute.direction = (orientation)myDirection;
myRoute.distance = myDistance;
Console.WriteLine("指定方向 {0} 的距離是 {1}", myRoute.direction, myRoute.distance);
注意myRoute.direction = (orientation)myDirection這一行代碼,應(yīng)該是枚舉的應(yīng)用場(chǎng)景:只需要指明枚舉值中的基本類型值i,再通過(guò)(enumName)i的方式,即可取得對(duì)應(yīng)的字符串。
聲明一個(gè)結(jié)構(gòu):route(創(chuàng)建的結(jié)構(gòu)名) myRoute,再通過(guò) myRoute.屬性 的方式訪問(wèn)結(jié)構(gòu)中的成員。
數(shù)組
印象中的數(shù)組總是比較復(fù)雜的東東。一個(gè)不錯(cuò)的例子:需要存儲(chǔ)10個(gè)同學(xué)的姓名,使用數(shù)組即可簡(jiǎn)單解決,首先聲明數(shù)組:
string[] friendNames = new string [arrayCount];
string[] friendNames = {"張三","李四","王五","謝六","陳七"};
第一行只初始化數(shù)組大小,可選 常數(shù) 或 常量,初始化后,才可使用friendNames[0]的方式為數(shù)組元素賦值。第二行直接聲明數(shù)組,并且初始化了數(shù)組的內(nèi)容。
可使用for循環(huán),配合friendNames.Length的大小,來(lái)訪問(wèn)數(shù)組值,注意第1個(gè)元素的位置是0。也可使用foreach,并且不擔(dān)心超出數(shù)組范圍。foreach與for的區(qū)別在于,foreach是只讀訪問(wèn)。
foreach (string myStr in friendNames)
{
Console.WriteLine(myStr);
}
多維數(shù)組分為矩形數(shù)組(多行的每行元素個(gè)數(shù)相同)、鋸齒數(shù)組(多行的每行元素個(gè)數(shù)不同,并可能存在 {列1{行1{層1,層2},行2},列2...}),當(dāng)然,同樣可以使用foreach的方式,取出所有元素的內(nèi)容,多嵌套一個(gè)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");
}
注意:這兒用的都是[]或{},沒(méi)有用()的方式哈,不要總寫錯(cuò)括號(hào),很低級(jí)。
字符串處理
這個(gè)就有意思多了??梢酝ㄟ^(guò)myString[1]的方式訪問(wèn)字符串中的每個(gè)字符,第1個(gè)字符位是0:
String myString = " HeLlO WoRlD ";
char myChar = myString[1];
使用ToCharArray(),獲取一個(gè)分解myString每個(gè)字符后的char數(shù)組:
char[] myChars = myString.ToCharArray();
還可以使用myString.Length獲取字符串的數(shù)量,使用myString.ToLower()轉(zhuǎn)為大寫,myString.ToUpper()轉(zhuǎn)為小寫。注意:ToLower()、ToUpper()并不會(huì)改變變量本身的值的大小寫,還需要用myString = myString.ToLower()才能修改變量本身的值。
myString.Trim()可以去掉字符串前、后的空格,還有TrimStart()和TrimEnd(),分別去掉前面和后面的空格。還可以使用Trim(myChar[])的方式,指定去除前后的內(nèi)容不限于空格(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]);
最近剛好在搞微信開發(fā),在C#中,上面這個(gè)例子,就可以實(shí)現(xiàn)以一個(gè)(些)關(guān)鍵字分解用戶輸入的個(gè)人信息。例子中使用的Split()方法,同樣的可以使用char數(shù)組來(lái)指明分解的標(biāo)識(shí)。強(qiáng)調(diào)一下,Split分解字符串的位置可以是多個(gè)不同標(biāo)記的位置。
結(jié)語(yǔ)
從這章開始,很多內(nèi)容都可以馬上做一些小的課題了,呵呵。不管是枚舉(同類型)、結(jié)構(gòu)(成員不同類型)、數(shù)組(一維、矩形[二維]、鋸齒[不規(guī)則多維])、以及字符串處理,還有枚舉與普通變量之間的值如何轉(zhuǎn)換,數(shù)組如何聲明、初始化和訪問(wèn)等等。而字符串的處理就太有意思了,特別是split,還有replace,再應(yīng)用char數(shù)組,可以說(shuō)是錦上添花啊。
附:習(xí)題案例
編寫一個(gè)控制臺(tái)應(yīng)用程序,接收用戶輸入的字符串,將字符串的順序以輸入時(shí)相反的方向輸出:
Console.WriteLine("請(qǐng)輸入需要交換位置的字符串:");
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);
編寫一個(gè)控制臺(tái)應(yīng)用程序,接收用戶輸入的字符串,用yes替換字符串中的所有no:
Console.WriteLine("請(qǐng)輸入帶有no的字符串:");
myString = Console.ReadLine().ToLower().Trim();
Console.WriteLine("用 yes 替換掉 {0} 中的 no 后:{1}", myString, myString.Replace("no", "yes"));
編寫一個(gè)控制臺(tái)應(yīng)用程序,給字符串的每個(gè)單詞加上引號(hào)(我以為,單詞間肯定有空格):
Console.WriteLine("請(qǐng)輸入帶有空格的單詞:");
String myWord = Console.ReadLine().Trim();
String[] myWords = myWord.Split(' ');
myWord = "";
foreach(String tmpWord in myWords)
{
myWord += "\"" + tmpWord + "\" ";
}
Console.WriteLine("添加引號(hào)后的句子:{0}", myWord);
相關(guān)文章
淺談C#2.0泛型中的變化:default關(guān)鍵字
下面就詳細(xì)的說(shuō)明一下。之所以會(huì)用到default關(guān)鍵字,是因?yàn)樾枰诓恢李愋蛥?shù)為值類型還是引用類型的情況下,為對(duì)象實(shí)例賦初值2013-09-09Unity實(shí)現(xiàn)物體左右移動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)物體左右移動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08c# 使用Json.NET實(shí)現(xiàn)json序列化
這篇文章主要介紹了詳解C#中的JSON序列化方法,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-05-05淺談Async和Await如何簡(jiǎn)化異步編程(幾個(gè)實(shí)例讓你徹底明白)
本篇文章主要介紹了淺談Async和Await如何簡(jiǎn)化異步編程,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12ScriptControl控件執(zhí)行自定義VBS腳本示例分析
這篇文章主要介紹ScriptControl控件 msscript.ocx msscript.oca執(zhí)行自定義VBS腳本的示例代碼,需要的朋友可以參考下2013-04-04WPF開發(fā)之UniformGrid和ItemsControl的應(yīng)用詳解
為了簡(jiǎn)化開發(fā),WPF提供了UniformGrid布局和ItemsControl容器,本文以一個(gè)簡(jiǎn)單的小例子,簡(jiǎn)述如何在WPF開發(fā)中應(yīng)用UniformGrid和ItemsControl實(shí)現(xiàn)均勻的布局,希望對(duì)大家有所幫助2024-01-01C#實(shí)現(xiàn)驗(yàn)證身份證是否合法的方法
這篇文章主要介紹了C#實(shí)現(xiàn)驗(yàn)證身份證是否合法的方法,實(shí)例分析了通過(guò)自定義函數(shù)實(shí)現(xiàn)針對(duì)身份證合法性驗(yàn)證的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-03-03VS中C#讀取app.config數(shù)據(jù)庫(kù)配置字符串的三種方法
這篇文章主要介紹了VS中C#讀取app.config數(shù)據(jù)庫(kù)配置字符串的三種方法,需要的朋友可以參考下2015-10-10C#中Parallel類For、ForEach和Invoke使用介紹
這篇文章介紹了C#中Parallel類For、ForEach和Invoke的使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04