Как преобразовать строку в массив int в C # - PullRequest
2 голосов
/ 02 октября 2011

Я делаю программу проверки кредитных карт, в которой я запрашиваю строку, которая будет представлять собой 16-значный номер (номер кредитной карты), и я хочу преобразовать ее в массив int.Как я могу это сделать?Затем мне нужно умножить все остальные цифры, начиная с первой цифры, на 2.

char[] creditNumbers = creditCardNumber.ToCharArray();

creditNumbers[0] = (char)((int)(creditNumbers[0] * 2));
creditNumbers[2] = (char)((int)(creditNumbers[2] * 2));
creditNumbers[4] = (char)((int)(creditNumbers[4] * 2));
creditNumbers[6] = (char)((int)(creditNumbers[6] * 2));
creditNumbers[8] = (char)((int)(creditNumbers[8] * 2));

Это то, что я сделал до сих пор, но мое приведение не выполнено правильно.Как мне решить проблему?

Ответы [ 2 ]

6 голосов
/ 02 октября 2011

Чтобы получить массив int, я бы сделал следующее:

creditCardNumber.Select(c => int.Parse(c.ToString())).ToArray()

Чтобы проверить число с помощью алгоритма Луна , вы можете сделать это:

bool IsValid(string creditCardNumber)
{
    var sum = creditCardNumber.Reverse()
                              .Select(TransformDigit)
                              .Sum();

    return sum % 10 == 0;
}

int TransformDigit(char digitChar, int position)
{
    int digit = int.Parse(digitChar.ToString());
    if (position % 2 == 1)
        digit *= 2;

    return digit % 10 + digit / 10;
}
2 голосов
/ 02 октября 2011
var intArray = creditCardNumber.ToCharArray().Select(o => int.Parse(o.ToString())).ToArray();
var result = new List<int>();

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

    if((i % 2) == 0)
      result.Add(intArray[i] * 2);
    else
        result.Add(intArray[i]);
}

Console.Write(string.Concat(result.Select(o => o.ToString())));
...