Я нахожусь на ранних этапах создания программы на C++, которая заменяет целочисленный ввод его английским аналогом. Мне не нужны инструкции о том, как сделать эту программу, а, скорее, понять, как определенная часть кода ведет себя определенным образом, и, возможно, советы по ее исправлению.C++ - индексный массив с использованием временной переменной
std::string strToEng(std::string s)
{
int sInt = atoi(s.c_str());
std::string digit1[] = {"zero", "one", "two", "three", "four", "five", "six", "seven",
"eight", "nine", "ten", "eleven", "twelve", "thirteen",
"fourteen", "fifteen", "sixteen", "seventeen", "eighteen",
"nineteen"};
switch(s.size())
{
case 1:
{
int temp = int(s[0]);
return digit1[temp];
}
}
return "error";
}
Проблема связана с массивом digit1 в инструкции switch. Когда я компилирую этот код, случай 1 не возвращает нужный результат. Если я изменил цифру1 [temp] на некоторую константу (например, цифру1 [3]), она отобразится правильно. Есть ли проблема с использованием переменной для индексации массива? Как я могу это решить?
EDIT: Возможно, обманчиво, что у меня нет способа обработки цифр выше девяти, но они все еще содержатся в цифре1. Причина этого в том, что этот код был переписан несколько раз.
* «Есть ли проблема с использованием переменной для индексации массива?» * Господи, надеюсь, нет. – WhozCraig
Проблема выглядит так, как будто это связано с преобразованием 'int (s [0])'. Это для меня выглядит как актерский состав, который просто интерпретирует байты от char до int, и это зависит от значения ascii. '1' - это не то же самое, что 1. Вам нужно использовать какой-либо метод для преобразования этого символа в int. (Я вижу, что вы уже используете atoi в своем коде) – Porkbutts
'int temp = int (s [0]);' ??? включить s.size() ??? Это не хорошо. –