我有一个文件,其中有一些数字我想在每行中排名第一,第二位。我的文件中有数字:
-944 -857
-158 356
540 70
15 148
例如我想总结-944和-857我该怎么办? 我做了它像下面的代码检查数字和输出是-158和15(它没有显示-944和540 !!!):
StreamReader ar = new StreamReader(@"C:\Users\arash\Desktop\problem1 (3).in");
while (ar.ReadLine() != null)
{
string[] spl = ar.ReadLine().Split(' ');
MessageBox.Show(spl[0]);
}
答案 0 :(得分:4)
您正在while
检查中读取一行,然后再次解析该值 - 这就是为什么它似乎只读取偶数行。
建议的解决方案:
StreamReader ar = new StreamReader(@"C:\Users\arash\Desktop\problem1 (3).in");
// Prepare the first line.
string line = ar.ReadLine();
while (line != null) {
// http://msdn.microsoft.com/en-us/library/1bwe3zdy.aspx
string[] spl = line.Split(' ', 2, StringSplitOptions.RemoveEmptyEntries);
MessageBox.Show(spl[0]);
// Prepare the next line.
line = ar.ReadLine();
}
更新:使用string.Split()
的重载,不会返回空结果和最多2个值(1和字符串的其余部分)。
答案 1 :(得分:3)
StreamReader ar = new StreamReader(@"C:\Users\arash\Desktop\problem1 (3).in");
while ((string line = ar.ReadLine()) != null)
{
string[] spl = line.Split(' ', 2, StringSplitOptions.RemoveEmptyEntries);
MessageBox.Show(spl[0]);
}
您正在阅读两次但仅使用第二次阅读。
注意:您也没有从行的开头修剪空格,因此如果数据具有前导空格,您将丢失数字(如示例所示)。
答案 2 :(得分:2)
你在你的while条件下再做一个readline,然后再在你的while范围的主体中,因此跳过1条readline指令(在while条件下)。试试这个:
StreamReader ar = new StreamReader(@"C:\Users\arash\Desktop\problem1 (3).in");
string s = ar.ReadLine();
while (s != null)
{
//string[] spl = s.Split(' ');
// below code seems safer, blatantly copied from one of the other answers..
string[] spl = s.Split(' ', 2, StringSplitOptions.RemoveEmptyEntries);
MessageBox.Show(spl[0]);
s = ar.ReadLine();
}
答案 3 :(得分:2)
StreamReader ar = new StreamReader(@"C:\Users\arash\Desktop\problem1 (3).in");
// Load a line into s
string s = ar.ReadLine();
while (s != null)
{
// Split on space
string[] spl = s.Trim(' ').Split(' ');
// Declare two variables to hold the numbers
int one;
int two;
// Try to parse the strings into the numbers and display the sum
if ( int.TryParse( spl[0], out one ) && int.TryParse( spl[1], out two) ) {
MessageBox.Show( (one + two).ToString() )
}
// Error if the parsing failed
else {
MessageBox.Show("Error: Numbers were not in integer format");
}
// Read the next line into s
s = ar.ReadLine();
}