Попробуйте следующее:
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));
}
}
Можно использовать то, что кодировки символов для цифр - все в порядке от 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'
намного более читаемым.
Или Вы могли использовать "корректный" метод, подобный Вашему исходному подходу atoi, но со станд.:: stringstream вместо этого. Это должно работать с символами как вход, а также строки. (повышение:: lexical_cast является другой опцией для более удобного синтаксиса)
(atoi, старая функция C, и обычно рекомендуется использовать более гибкие и безопасные с точки зрения типов эквиваленты C++, если это возможно. станд.:: stringstream покрывает преобразование в и от строк)
#include<iostream>
#include<stdlib>
using namespace std;
void main()
{
char ch;
int x;
cin >> ch;
x = char (ar[1]);
cout << x;
}
Если Вы взволнованы по поводу кодирования, можно всегда использовать оператор переключения.
Просто быть осторожными с форматом Вы удерживаете те большие количества. Максимальный размер для целого числа в некоторых системах всего 65,535 (32 767 подписанных). Другие системы, Вы имеете 2,147,483,647 (или 4,294,967,295 неподписанных)
Какие-либо проблемы со следующим способом сделать его?
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;
}
}
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.
UBool u_isdigit (UChar32 c)
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.