今天寫K均值算法的時候,需要將控制台輸入的初始化簇中心點讀入(就是一些數字),讀入的方式是一行讀入,以空格隔開,回車結束。例如:“1_2_3...”
C#中控制台讀入的方法也不多,常見的有:
1)Console.Read() 方法讀取單個字符,獲取的是用戶輸入的任何值的ASCII值;例如輸入的是‘1’,得到的是“49”。該方法是讀入一行處理一次。
2)Console.ReadLine()方法讀取一行字符串,獲取的是輸入的一行的整個字符串;該方法是讀入一行處理一次。
3)Console.ReadKey()方法讀入的是一個按鍵值,一次讀入一個字符。例如:讓用戶輸入Y或者N的時候可以用。實際上這個方法在實際應用中並不用來讀入數據,它有另一個功能就是可以使當前程序等待鍵盤輸入,以便退出程序。使調試時能看到輸出結果。如果沒有此句,命令窗口會一閃而過。(相信初學的會遇到這個問題,作用跟C中的getch()函數一樣。)
那么怎么實現我的輸入要求呢,我用的是Console.ReadLine()和split()兩個方法組合實現的。當然還有更好的方法,等待讀者去發現。具體代碼如下:
Console.Write("\n輸入K個初始簇中心點的序號(序號一行輸入,以空格隔開,回車結束!)\n"); string str = Console.ReadLine();//從控制台讀入輸入 string[] nums = str.Split(new string[]{ " " }, StringSplitOptions.None);//這里是以空格隔開 int index=0; while(index<nums.Count<string>()) { int num=Convert.ToInt32(num[index]); //獲得數字 index++; }
同時簡單介紹一下split()這個方法:(該部分內容轉自:http://www.cnblogs.com/yugen/archive/2010/08/18/1802781.html)
1
、用字符串分隔:
using System.Text.RegularExpressions;
string str = " aaajsbbbjsccc " ;
string [] sArray = Regex.Split(str, " js " ,RegexOptions.IgnoreCase);
foreach ( string i in sArray) Response.Write(i.ToString() + " <br> " );
輸出結果:
aaa
bbb
ccc
2 、用多個字符來分隔:
string str = " aaajbbbscccjdddseee " ;
using System.Text.RegularExpressions;
string str = " aaajsbbbjsccc " ;
string [] sArray = Regex.Split(str, " js " ,RegexOptions.IgnoreCase);
foreach ( string i in sArray) Response.Write(i.ToString() + " <br> " );
輸出結果:
aaa
bbb
ccc
2 、用多個字符來分隔:
string str = " aaajbbbscccjdddseee " ;
string
[] sArray
=
str.Split(
new
char
[
2
]
{'j','s'}
);
foreach ( string i in sArray) Response.Write(i.ToString() + " <br> " );
輸出結果:
aaa
bbb
ccc
ddd
eee
3 、用單個字符來分隔:
string str = " aaajbbbjccc " ;
string [] sArray = str.Split( ' j ' );
foreach ( string i in sArray) Response.Write(i.ToString() + " <br> " );
輸出結果:
aaa
bbb
ccc
foreach ( string i in sArray) Response.Write(i.ToString() + " <br> " );
輸出結果:
aaa
bbb
ccc
ddd
eee
3 、用單個字符來分隔:
string str = " aaajbbbjccc " ;
string [] sArray = str.Split( ' j ' );
foreach ( string i in sArray) Response.Write(i.ToString() + " <br> " );
輸出結果:
aaa
bbb
ccc
////////////////////////////////////////////////
string[] arr = str.Split("o");
這是一個具有語法錯誤的語句,Split 的 separator 參數應該是 char[] 或 string[],不應是字符串。正確的示例:
string str = "technology";
char[] separator = { 'o' };
string[] arr = str.Split(separator);
char[] separator = { 'o' };
string[] arr = str.Split(separator);
////////////////////////////////////////////////////
String.Split 方法有6個重載函數:
程序代碼
1) public string[] Split(params char[] separator)
2) public string[] Split(char[] separator, int count)
3) public string[] Split(char[] separator, StringSplitOptions options)
4) public string[] Split(string[] separator, StringSplitOptions options)
5) public string[] Split(char[] separator, int count, StringSplitOptions options)
6) public string[] Split(string[] separator, int count, StringSplitOptions options)
3) public string[] Split(char[] separator, StringSplitOptions options)
4) public string[] Split(string[] separator, StringSplitOptions options)
5) public string[] Split(char[] separator, int count, StringSplitOptions options)
6) public string[] Split(string[] separator, int count, StringSplitOptions options)
下邊我們通過一些實例來說明下怎么使用(以下string words = "1,2.3,,4";):
1. public string[] Split(params char[] separator)
程序代碼
string[] split = words.Split(new Char[] { ',' });//返回:{"1","2.3","","4"}
string[] split = words.Split(new Char[] { ',', '.' });//返回:{"1","2","3","","4"}
2. public string[] Split(char[] separator, int count)
string[] split = words.Split(new Char[] { ',', '.' });//返回:{"1","2","3","","4"}
2. public string[] Split(char[] separator, int count)
程序代碼
string[] split = words.Split(new Char[] { ',', '.' }, 2);//返回:{"1","2.3,,4"}
string[] split = words.Split(new Char[] { ',', '.' }, 6);//返回:{"1","2","3","","4"}
3. public string[] Split(char[] separator, StringSplitOptions options)
string[] split = words.Split(new Char[] { ',', '.' }, 6);//返回:{"1","2","3","","4"}
3. public string[] Split(char[] separator, StringSplitOptions options)
程序代碼
string[] split = words.Split(new Char[] { ',', '.' }, StringSplitOptions.RemoveEmptyEntries);//返回:{"1","2","3","4"} 不保留空元素
string[] split = words.Split(new Char[] { ',', '.' }, StringSplitOptions.None);//返回:{"1","2","3","","4"} 保留空元素
4. public string[] Split(string[] separator, StringSplitOptions options)
string[] split = words.Split(new Char[] { ',', '.' }, StringSplitOptions.None);//返回:{"1","2","3","","4"} 保留空元素
4. public string[] Split(string[] separator, StringSplitOptions options)
程序代碼
string[] split = words.Split(new string[] { ",", "." }, StringSplitOptions.RemoveEmptyEntries);//返回:{"1","2","3","4"} 不保留空元素
string[] split = words.Split(new string[] { ",", "." }, StringSplitOptions.None);//返回:{"1","2","3","","4"} 保留空元素
5. public string[] Split(char[] separator, int count, StringSplitOptions options)
string[] split = words.Split(new string[] { ",", "." }, StringSplitOptions.None);//返回:{"1","2","3","","4"} 保留空元素
5. public string[] Split(char[] separator, int count, StringSplitOptions options)
程序代碼
string[] split = words.Split(new Char[] { ',', '.' }, 2, StringSplitOptions.RemoveEmptyEntries);//返回:{"1","2.3,,4"} 不保留空元素
string[] split = words.Split(new Char[] { ',', '.' }, 6, StringSplitOptions.None);//返回:{"1","2","3","","4"} 保留空元素
6. public string[] Split(string[] separator, int count, StringSplitOptions options)
string[] split = words.Split(new Char[] { ',', '.' }, 6, StringSplitOptions.None);//返回:{"1","2","3","","4"} 保留空元素
6. public string[] Split(string[] separator, int count, StringSplitOptions options)
程序代碼
string[] split = words.Split(new string[] { ",", "." }, 2, StringSplitOptions.RemoveEmptyEntries);//返回:{"1","2.3,,4"} 不保留空元素
string[] split = words.Split(new string[] { ",", "." }, 6, StringSplitOptions.None);//返回:{"1","2","3","","4"} 保留空元素
string[] split = words.Split(new string[] { ",", "." }, 6, StringSplitOptions.None);//返回:{"1","2","3","","4"} 保留空元素
需要注意的是沒有重載函數public string[] Split(string[] separator),所以我們不能像VB.NET那樣使用words.Split(","),而只能使用words.Split(',')