如何在自己的索引中添加数字

时间:2010-10-30 08:38:39

标签: c#

我将有一个数字作为使用输入或我存储分配给字符串的数字

  string s"1234567";

对于此,每个字符串的索引将为0,1,2,3,4,依此类推

我想将该索引的数字添加为1 + 0,2 + 1,3 + 2等等

这样输出应该是1,3,5,就像那样

2 个答案:

答案 0 :(得分:4)

IEnumerable<int> IndexDigitSum(string s)
{
    for(int i=0;i<s.Length;i++)
    {
      int digit=s[i]-'0';
      if(digit<0||digit>9)
         throw new FormatException("Invalid Digit "+s[i]);
      yield return (digit+i)%10;
    }
}

在.net 2.0中,您可以通过添加到本地数组来替换yield return:

int[] IndexDigitSum(string s)
{
    int[] result=new int[s.Length];

    for(int i=0;i<s.Length;i++)
    {
      int digit=s[i]-'0';
      if(digit<0||digit>9)
         throw new FormatException("Invalid Digit "+s[i]);
      result[i]=(digit+i)%10;
    }
    return result;
}

或者如果你想让它们合并:

string IndexDigitSum(string s)
{
    string[] parts=new string[s.Length];

    for(int i=0;i<s.Length;i++)
    {
      int digit=s[i]-'0';
      if(digit<0||digit>9)
         throw new FormatException("Invalid Digit "+s[i]);
      parts[i]=((digit+i)%10).ToString();
    }
    return string.Join(",", parts);
}

要获得总和的最后一位数,可以简单地添加一个%10,因为数字的最后一位数是它的余数模10。

答案 1 :(得分:4)

string s = string.Join(",", valueString.Select(
     (c, i) => (i + (int)(c-'0')) % 10));

或在2.0中:

string[] result = new string[valueString.Length];
for(int i = 0; i < result.Length ; i++) result[i] =
         ((i + (int)(valueString[i] - '0')) % 10).ToString();
string s = string.Join(",", result);