Какую ценность использовать? C # (добавление чисел, представленных в виде строк) - PullRequest
3 голосов
/ 16 октября 2008

Если у меня есть строка (010) и я хочу добавить к ней 1 (011), какой тип значения следует использовать, чтобы преобразовать эту строку в число для добавления и в то же время сохранить целое число, а не 10 + 1 = 11.

Ответы [ 10 ]

15 голосов
/ 16 октября 2008

Вы можете использовать что-то вроде этого:

string initialValue = "010";
int tempValue = Int.Parse(initialValue) + 1;
string newValue = tempValue.ToString("000");

Вы делаете свою математику как обычно, а затем просто возвращаете свою строку в прежний формат, используя функцию форматирования чисел .ToString()

5 голосов
/ 16 октября 2008
if (int.TryParse(str, out i))
    str = (i + 1).ToString("000");

НТН.

( edit : исправлены проблемы, указанные BoltBait и steffenj)

3 голосов
/ 16 октября 2008

Похоже, вы пытаетесь работать с двоичными числами, закодированными в виде строк (хммм. Может быть, есть место для clippy в visual studio). Вы можете использовать методы Convert (), чтобы сделать это для вас. 2 используется для обозначения формата base-2. Если вам нужно, чтобы строка была определенного размера, вам, возможно, придется добавить нулевое заполнение.

string s = "010";
s = Convert.ToString(Convert.ToInt32("010", 2) + 1, 2);
1 голос
/ 17 октября 2008

Вот как бы я это сделал:

    public string AddOne (string text)
    {
        int parsed = int.Parse(text);
        string formatString = "{0:D" + text.Length + "}";
        return string.Format(formatString, parsed + 1);
    }

Поместив длину входного текста в строку формата, вы можете убедиться, что ваша результирующая строка имеет ту же длину, что и введенная вами.

В зависимости от ваших потребностей, вам может потребоваться обработка исключений вокруг int.Parse. Я подумал, что я позволю исключению всплыть как исключение (ArgumentException или ArgumentNullException) от int.Parse будет теми же исключениями, которые я в любом случае вызову в моем методе.

1 голос
/ 16 октября 2008
string str = "110";
int i = 0;
int maxSize = 3;
if (int.TryParse(str, out i))
{
    str = string.Concat(new string('0', maxSize - (i + 1).ToString().Length), i + 1);
}
1 голос
/ 16 октября 2008

Попробуйте что-то вроде этого:

string a = "010";
string b = "1";
a = (int.Parse(a) + int.Parse(b)).ToString(new string('0', Math.Max(a.Length, b.Length)));
Console.WriteLine(a);

Это позволяет справиться с произвольной длиной строк a и b.

1 голос
/ 16 октября 2008
int value = 10;// or, int value = Convert.ToInt32("010");
value += 1;
string text = value.ToString("000");

«000» в вызове ToString называется строкой формата . Он говорит .net, как распечатать номер. В этом случае символ «0» указывает, что для числа в этой позиции он должен отображать ноль, если в противном случае число не отображалось бы.

1 голос
/ 16 октября 2008

Ну, вы всегда можете создать свою собственную структуру, которая содержит int и требуемую длину вывода (в зависимости от длины ввода). Или просто помните это очень временно, как показано ниже ... это зависит от того, как часто вам это нужно.

string ParseAndAdd(string text, int add)
{
    int parsed = int.Parse(text);
    return (parsed + add).ToString().PadLeft(text.Length, '0');
}
0 голосов
/ 16 октября 2008

Похоже, Бинарная операция над строкой, Я думаю, что вы должны создать класс BinaryString, который должен иметь внутреннее двоичное и десятичное преобразование, а затем перегрузить +, - и т. Д. И выполнить десятичную операцию внутри. и вывести результат в виде двоичной строки.

0 голосов
/ 16 октября 2008

Можно ли было бы просто всегда обеспечить наличие трех цифр?

Итак, вы бы делали математику как обычно, но создавали бы функцию для добавления дополнительных нулей вперед, если это необходимо?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...