char数组存储空值

时间:2016-07-18 07:36:37

标签: c# to-char

我目前正在做一些代码挑战,我遇到了一个无法找到解决方案的问题。

.fixedbutton {
  position: fixed; 
  bottom: 0;
  background-color:#2bde73;
  -moz-border-radius:5px;
  -webkit-border-radius:5px;
   border-radius:5px;
   display:block;
   width: 100%;
   color:#ffffff;
   font-size:15px;
   text-decoration:none;
    padding-top: 10px;
    padding-bottom: 10px;
   left : 0;
  z-index : 99999;
  -webkit-backface-visibility: hidden;
}

每当我尝试将字符串传递给它时,它会将单独的值存储为null im my digit array。例如,我试图传递值test1 =“1211”

2 个答案:

答案 0 :(得分:0)

由于多种原因,您的方法有误:

1-您要比较计数和指数,您应该将计数与该指数中的值进行比较。

if (count == i)应为if (count == char.GetNumericValue(digit[i]))

2-您应该计算索引而不是存储在该索引处的字符:

3-最重要的是:当您发现不匹配时,您应该返回false。您无需比较计数成功匹配数字。

num.Count(x => x == digit[i]);应为num.Count(x => x == char.Parse(i.ToString()));

您可以像这样修复您的方法:

(这不是首选逻辑,请在下方检查替代方案)

public static bool SelfDescribing(string num)
{

    char[] digit = num.ToArray();
    int bound = digit.Count();

    int sucessCount = 0;
    for (int i = 0; digit.Length != 0 && i < bound; i++)
    {
        var count = num.Count(x => x == char.Parse(i.ToString()));
        if (count == char.GetNumericValue(digit[i]))
        {
            sucessCount++;
        }
    }
    return sucessCount == digit.Length;
}

优化您的方法:

public static bool SelfDescribing(string num)
{
    for (int i = 0; i < num.Length; i++)
    {
        var count = num.Count(x => x == char.Parse(i.ToString()));
        if (count != char.GetNumericValue(num[i]))
            return false;
    }
    return true;
}

替代工作逻辑:

public static bool SelfDescribing(string num)
{
    bool result = true;

    int[] numbersArray = num.ToArray().Select(x => (int)char.GetNumericValue(x)).ToArray();

    var occurences = numbersArray.GroupBy(x => x).ToDictionary(x => x.Key, x => x.Count());

    for (int i = 0; i < numbersArray.Length; i++)
    {
        int occ;

        if (occurences.TryGetValue(i, out occ))
        {
            if(occ != numbersArray[i])
            {
                result = false;
                break;
            }
        }
        else
        {
            if (i == 0)
                continue;
        }
    }

    return result;
}

答案 1 :(得分:0)

这会给你预期的结果吗?你还没有解释你想要做什么,但似乎arrLength应该只被初始化一次,可能。

public static bool SelfDescribing(string num)
{
   char[] digit = num.ToArray();
   int bound = digit.Count();
   int arrLength = 0;

   for (int i = 0; digit.Length != 0 && i < bound; i++)
   {
        var count = num.Count(x => x == digit[i]);
        if (count == i)
        {
            arrLength++;
            if (arrLength == bound)
            {
                return true;
            }
         }          
   }
   return false;
 }