2013-11-28 7 views
0

У нас есть кодирование упражнения вручную реализовать int.Parse() метод .NetКак вручную запрограммировать int.Parse()

Я не понимаю, как работает их «правильное» решение. Но я помню, что он включает факторинг символов на десятый, сотый ...

Я нашел решение, которое выполняется с функциями Java. Может ли кто-нибудь объяснить мне, как умножить его на десятки разбор строки на int?

public static int myStringToInteger(String str) { 
    int answer = 0, factor = 1; 
    for (int i = str.length()-1; i >= 0; i--) { 
     answer += (str.charAt(i) - '0') * factor; 
     factor *= 10; 
    } 
    return answer; 
} 
+3

взять бумагу и ручку, шаг за шагом попытаться увидеть, что он делает. – RamonBoza

+0

Вы пытались написать пробег? Скажем, на входе «235»? –

+4

Подсказка: 1234 = 4 + (3 * 10) + (2 * 10 * 10) + (1 * 10 * 10 * 10) – Rik

ответ

0

Предположим, что это строка следующего содержания: "";

Ответ на самом деле представляет собой сумму итеративных значений, начиная с 0. Фактор - множитель, умножающий n-ые цифры.

Он делает это, по существу:

answer = 0 

factor = 1 
answer = answer + (4 * 1) = 0 + 4 = 4; 

factor = 10; 
answer = answer + (3 * 10) = 4 + 30 = 34; 

factor = 100; 
answer = answer + (2 * 100) = 34 + 200 = 234; 

factor = 1000; 
answer = answer + (1 * 1000) = 234 + 1000 = 1234; 

factor = 1000; 
answer = answer + (0 * 10000) = 1234 + 0 = 1234; 

Конечно, вы должны позаботиться о том случае, когда строка состоит из чего-то большего, чем обычные цифры.

1

Это один из способов, используя Linq,

string st = "1234785"; 
    int i = 0; 
    int counter = 0; 
    st.All(x => { 
    if (char.IsDigit(x)) 
    { 
     i += (int)(char.GetNumericValue(x) * Math.Pow(10, (st.Length - counter - 1))); 
    } 
    counter++; 
    return true; 
}); 

после этого, я = 1234785.

, если положить некоторую строку, как «привет» будет возвращать 0 к вам, если вы проходите строка «Hello 123» тогда он вернет вам 123

1

На самом деле это не место получения вашего дома работа :-)

Однако, я помню, анализируя мой п чтобы понять, «как делают такие вещи». В более поздние времена я всегда реорганизовал внешний код на более мелкие части, которые я мог понять.

Таким образом, для приведенного выше фрагмента кода, это может быть:

public static int myStringToInteger(String str) { 
    int answer = 0; 
    int factor = 1; 

    // Iterate over all characters (from right to left) 
    for (int i = str.length() - 1; i >= 0; i--) { 

     // Determine the value of the current character 
     // (I guess this is the trick you were missing 
     // We extract a single character, subtract the 
     // ASCII value the character '0', getting the "distance" 
     // from zero. So we converted a single character into 
     // its integer value) 
     char currentCharacter = str.charAt(i); 
     int value = currentCharacter - '0'; 

     // Add the value of the character at the right place 
     answer += value * factor; 

     // Step one place further 
     factor *= 10; 
    } 

    return answer; 
} 
+0

Спасибо, хотя. На самом деле это не домашнее задание, я просто хотел понять это. Понял, что я неправильно понял вопрос. – NullReferenceException

Смежные вопросы