Привет, я сделал сообщение раньше, хотя считаю, что это было довольно неоднозначно, поэтому я попробую еще раз и по-другому слову.Ошибка while/for loop
Я пытаюсь написать программу, которая берет ввод двух английских чисел и преобразует их в целые числа (используя массивы), выполняет вычисления, а затем преобразует их обратно в английские слова.
Например:
Ввод данные пользователя: sixty_six + шесть Выход: seventy_two
Ввод данные пользователя: forty_four - четыре Выход: сорок
и т.д.
Однако я были проблемы с выяснением проблемы в моем коде, провел последний час или так пытаюсь найти проблему, хотя я не смог. Поэтому, надеюсь, кто-то здесь может помочь мне.
Мой код cout
есть так trank, где в цикле он идет не так, кажется, работает так, как предполагалось, до второй линии cout. означает, что он выводит the token is forty
и tens is euqal to
, а затем он терпит неудачу и заканчивается:
nt Wordnum::read_number(string n) {
int result_ten = 0;
int result_unit = 0;
int j = 0;
// Loops through input and turns it all to lower case.
while (n[j]) {
char c;
c = n[j];
c = (tolower(c));
n[j] = c;
j++;
}
string delimiter = "_";
size_t pos = 0;
string token;
// Checks for the _ delimiter and takes the first token then checks it against the array to "convert" from string to int.
while ((pos = n.find(delimiter)) != string::npos) {
token = n.substr(0, pos);
cout << "Token is: '" << token << "'" << std::endl;
for (int i = 0; i < 20; i++) {
if (token == tens[i]) {
result_ten = i * 10;
n.erase(0, pos + delimiter.length());
cout << "tens is equals to: " << result_ten << endl;
} else if (token == units[i]) {
result_unit = i;
n.erase(0, pos);
}
}
result_ten = (result_ten + result_unit);
cout << "ten is equals to: " << result_ten << endl;
}
return result_ten;
}
массивы, которые используются:
string const Wordnum::units[] = {"zero", "one", "two", "three", "four", "five",
"six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen",
"fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};
string const Wordnum::tens[] = {"zero", " ", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"};
Спасибо заранее. Если что-то неясно, я попробую и объясню это лучше.
Compile со всеми предупреждениями и информацией для отладки (например, 'г ++ -Wall -g') и узнать, как использовать отладчик (например,'gdb'), чтобы запустить вашу программу шаг за шагом. –
Имейте в виду, что std :: string не имеет нулевой завершенной c-строки –