【问题标题】:C# How to compare 2 numbers that were pulled from a stringC#如何比较从字符串中提取的2个数字
【发布时间】:2016-07-15 16:18:14
【问题描述】:

我必须编写一个程序,它将接收一系列用逗号分隔的自然数,例如 [13,2,44,56,78,3,354] 并提取一个包含不小于该元素的元素的子字符串之前,例如它的 [2,44,56,78]。如果有多个这样的子字符串来显示较长的一个。到目前为止,我有这个。

using System;
using static System.Console;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Text.RegularExpressions;

class Program
{
    static void Main()
    {

    string s1 = ReadLine();

    string[] numbers = Regex.Split(s1, @"\D+");
    foreach (string value in numbers)
    {
        if (!string.IsNullOrEmpty(value))
        {
            int i = int.Parse(value);
            int highest = 
        }
    } WriteLine(s1);

    Console.ReadKey();
    }
}

现在我必须比较下一个数字是否小于或大于下一个数字,而我在这里陷入困境。有什么想法吗?

【问题讨论】:

  • 大于 >,小于 <.>
  • 您应该使用for 循环,而不是foreach,并迭代到比集合大小小一,这样您就可以执行if (numbers[i] &lt; numbers[i+1])。此外,您的示例看起来错误,因为您包含 2 但它小于 13。

标签: c# string linq compare


【解决方案1】:

如果我理解正确,您需要如下所示的内容:

string numbers = "13,2,44,56,78,3,354,1,2,3,4,5,4";
var values = numbers.Split(',').Select(a => int.Parse(a)).ToArray();

var maxStart = values.Length > 0 ? values[0] : 0;
var maxLength = values.Length > 0 ? 1 : 0;
int currentStart = 0;
int currentLength = 1;

for (int i=0; i<values.Length; i++)
{
    if (i + 1 < values.Length && values[i + 1] >= values[i])
        currentLength++;
    else
    {
        if (currentLength > maxLength)
        {
            maxLength = currentLength;
            maxStart = currentStart;
        }
        currentStart = i + 1;
        currentLength = 1;
    }
}
Console.WriteLine("Start={0}, Length={1}, Sequence={2}", maxStart, maxLength,
    string.Join(",", values.Skip(maxStart).Take(maxLength)));
//Start=7, Length=5, Sequence=1,2,3,4,5

【讨论】:

  • 正是如此。非常感谢你。我在面试时需要这个,但它告诉我,基本培训太少了,甚至连考虑一份工作都没有。我需要学习更多。
【解决方案2】:

抱歉,我无法对此进行测试(或查找正确的调用),但希望您能明白要点。您阅读每个数字,看看它是否 >= 比上一个数字。 如果是,那么您将其存储在列表中。一旦有一个数字小于前一个数字,您就打印出序列并清除列表。

List<int> sequence = new List<int>(10);
int previousNumber = -1;
int currentNumber = -1;
foreach (string value in numbers)
{
    if (!string.IsNullOrEmpty(value))
    {
        currentNumber = int.Parse(value);
        if (currentNumber >= previousNumber)
        {
            sequence[sequence.Length()] = currentNumber;
            previousNumber = currentNumber;
        }
        else
        {
            if (sequence.Length() > 1)
            { 
                // print sequence.
            }
            // Erase everything in the list.
        }
    }
}

【讨论】:

  • 出现错误:严重性代码描述项目文件行抑制状态错误 CS1061“列表”不包含“长度”的定义,并且没有扩展方法“长度”接受类型的第一个参数'List' 可以找到(您是否缺少 using 指令或程序集引用?) ConsoleApplication17 c:\users\mrbest\documents\visual studio 2015\Projects\ConsoleApplication17\ConsoleApplication17\Program.cs 27 Active
  • @KershelBest 是的,对此很抱歉,这是过去几个月用 C++ 编程并尝试在没有参考的情况下进行编程的缺点。
猜你喜欢
  • 2019-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-16
相关资源
最近更新 更多