#c #c 11
#c #c 11
Вопрос:
Я имея трудное время преобразования в ASCII коллегой каждого char в строку, моя цель состоит в том, чтобы преобразовать среднее значение каждого слова, например: если пользовательский ввод «любовь» код вернет 54, что этот код находится внутри цикла, и если пользовательский ввод, например, слово «нет».1: «Любовь», слово «нет».2: «Любовь» код должен возвращать; 54 54 , но мой код возвращает 108 я думаю, проблема в этой части sum = static_castlt;intgt;(compute - 64);
, но я не знаю правильный подход к моей проблеме
for(int x = 1; x lt;= numofinput; x ){ cout lt;lt; "Word no. " lt;lt; x lt;lt; ": "; getline(cin,words); for(auto compute : words){ if(isalpha(compute)){ compute = toupper(compute); sum = static_castlt;intgt;(compute - 64); } } }
Комментарии:
1. Почему бы не
cout
сразу, а не добавить ценностьsum
?2.
"Word no. "
и.getline(cin,words);
.. Вы хотите прочитать одно слово или список слов ?auto compute
делаетcompute
char
. Это то, чего ты ожидал?3. Не используйте магические числа. Вместо
64
этого напишите'@'
— или лучше:'A' - 1
4.
std::cin gt;gt; word;
прочитал бы одно слово (и пропустил пробелы)5. Вы суммируете все, а затем печатаете окончательную сумму, когда вы должны делать это для каждого слова.
Ответ №1:
Вам нужно установить sum = 0;
значение для каждого слова, по которому вы производите вычисления. Есть также ряд других небольших проблем, которые я прокомментировал в этом примере:
#include lt;cctypegt; #include lt;iostreamgt; #include lt;stringgt; int main() { int numofinput = 2; for(int x = 1; x lt;= numofinput; x ) { std::cout lt;lt; "Word no. " lt;lt; x lt;lt; ": "; if(std::string word; std::cin gt;gt; word) { // read one word int sum = 0; // only count the sum for this word // autoamp; if you'd like to show it in uppercase later: for(autoamp; compute : word) { // use unsigned char's with the cctype functions: auto ucompute = static_castlt;unsigned chargt;(compute); if(std::isalpha(ucompute)) { compute = static_castlt;chargt;(std::toupper(ucompute)); sum = compute - ('A' - 1); // 'A' - 1 instead of 64 } } std::cout lt;lt; "stats for " lt;lt; word lt;lt; 'n' lt;lt; "sum: " lt;lt; sum lt;lt; 'n' lt;lt; "avg: " lt;lt; static_castlt;unsignedgt;(sum) / word.size() lt;lt; 'n'; } } }