Как преобразовать единственный символ в интервал

Попробуйте следующее:

public static List<ProductActivity> getCatalog(Resources res){
    if(catalog == null) {
        catalog.add(new Product("Dead or Alive", res
                .getDrawable(R.drawable.product_salmon),
                "Dead or Alive by Tom Clancy with Grant Blackwood", 29.99));
        catalog.add(new Product("Switch", res
                .getDrawable(R.drawable.switchbook),
                "Switch by Chip Heath and Dan Heath", 24.99));
        catalog.add(new Product("Watchmen", res
                .getDrawable(R.drawable.watchmen),
                "Watchmen by Alan Moore and Dave Gibbons", 14.99));
    }
}
55
задан Andy 15 May 2009 в 13:50
поделиться

6 ответов

Можно использовать то, что кодировки символов для цифр - все в порядке от 48 (для '0') к 57 (для '9'). Это сохраняется для ASCII, UTF-x и практически вся другая кодировка ( см. комментарии ниже для больше на этом ).

Поэтому целочисленное значение для любой цифры является цифрой минус '0' (или 48).

char c = '1';
int i = c - '0'; // i is now equal to 1, not '1'

синонимично с

char c = '1';
int i = c - 48; // i is now equal to 1, not '1'

Однако, я нахожу первое c - '0' намного более читаемым.

136
ответ дан Liam Potter 7 November 2019 в 16:59
поделиться

Или Вы могли использовать "корректный" метод, подобный Вашему исходному подходу atoi, но со станд.:: stringstream вместо этого. Это должно работать с символами как вход, а также строки. (повышение:: lexical_cast является другой опцией для более удобного синтаксиса)

(atoi, старая функция C, и обычно рекомендуется использовать более гибкие и безопасные с точки зрения типов эквиваленты C++, если это возможно. станд.:: stringstream покрывает преобразование в и от строк)

8
ответ дан jalf 7 November 2019 в 16:59
поделиться
#include<iostream>
#include<stdlib>
using namespace std;

void main()
{
     char ch;
     int x;
     cin >> ch;
     x = char (ar[1]);
     cout << x;
}
2
ответ дан Community 7 November 2019 в 16:59
поделиться

Если Вы взволнованы по поводу кодирования, можно всегда использовать оператор переключения.

Просто быть осторожными с форматом Вы удерживаете те большие количества. Максимальный размер для целого числа в некоторых системах всего 65,535 (32 767 подписанных). Другие системы, Вы имеете 2,147,483,647 (или 4,294,967,295 неподписанных)

1
ответ дан user54650 7 November 2019 в 16:59
поделиться

Какие-либо проблемы со следующим способом сделать его?

int CharToInt(const char c)
{
    switch (c)
    {
    case '0':
        return 0;
    case '1':
        return 1;
    case '2':
        return 2;
    case '3':
        return 3;
    case '4':
        return 4;
    case '5':
        return 5;
    case '6':
        return 6;
    case '7':
        return 7;
    case '8':
        return 8;
    case '9':
        return 9;
    default:
        return 0;
    }
}
1
ответ дан jonsb 7 November 2019 в 16:59
поделиться

The answers provided are great as long as you only want to handle Arabic numerals, and are working in an encoding where those numerals are sequential, and in the same place as ASCII.

This is almost always the case.

If it isn't then you need a proper library to help you.

Let's start with ICU.

  1. First convert the byte-string to a unicode string. (Left as an exercise for the reader).
  2. Then use uchar.h to look at each character.
  3. if we the character is UBool u_isdigit (UChar32 c)
  4. then the value is int32_t u_charDigitValue ( UChar32 c )

Or maybe ICU has some function to do it for you - I haven't looked at it in detail.

3
ответ дан 26 November 2019 в 17:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: