【问题标题】:Is it possible to add multiple integers by user input?是否可以通过用户输入添加多个整数?
【发布时间】:2025-11-21 21:15:02
【问题描述】:

对“后端”非常陌生,并尝试了我在 r/dailyprogrammer 看到的这个 reddit 挑战

挑战: 为每个小写字母分配一个值,从 a 的 1 到 z 的 26。给定一串小写字母,求字符串中字母的值之和。

我特别想这样做,但有可能吗?用户如何输入一个单词,然后添加我在此处列出的 int,以便显示单词的总和。

int main()
{
    int a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z;
        a=1;
        b=2;
        c=3;
        d=4;
        e=5;
        f=6;
        g=7;
        h=8;
        i=9;
        j=10;
        k=11;
        l=12;
        m=13;
        n=14;
        o=15;
        p=16;
        q=17;
        r=18;
        s=19;
        t=20;
        u=21;
        v=22;
        w=23;
        x=24;
        y=25;
        z=26;

【问题讨论】:

  • 似乎任务是为一些数据分配标签,这些标签可以在以后搜索给定的搜索字符串。这与你正在做的事情完全不同。即使任务不明白,你也应该从一本 C++ 初学者的书开始。
  • 您将变量名与字符混淆了。字符'a' 与名为a 的变量没有关系。你需要做的是: 1) 学习如何读取一行用户输入 2.) 编写函数,该函数接受单个 char 并返回相应的数字 1-26 和 3.) 遍历用户输入,调用(2)中的每个字符的函数并将结果相加。
  • 我认为您对 C++ 的工作原理有相当基本的误解。名为“a”的变量的类型为“int”,值为“1”。但是你需要寻找一个 character 值(char),而那些与变量名完全无关。
  • 好吧,看来我的理解与我的预期相差甚远,谢谢。这是否意味着我在这里尝试做的事情从一开始就是错误的?

标签: c++


【解决方案1】:

这几乎是 C++ 中的一个函数调用

std::string example = "example";
std::cout << std::accumulate(example.begin(), example.end(), 0, 
  [](int sum, char c) { return sum + (c - 'a' + 1); }
  );

std::accumulate 在集合中添加东西。通常,它只使用“+”,但在这种情况下,我使用自定义加法器[](int sum, char c) { return sum + (c - 'a' + 1); }。这添加的不是c 的ASCII 值,而是(c - 'a' + 1)。如果是c=='a',那么c-'a'==0(c - 'a' + 1)==1

【讨论】:

  • 嗨!首先感谢大家的帮助,我从来没有听说过std::accumulate和其他相关功能,我一直使用w3schools网站作为我的主要参考,你对像我这样的初学者有什么建议吗?
  • @ramesays:你真的应该买一本好书。虽然 cppreference.com 是一个很好的 reference 网站,但遗憾的是还没有一个很好的学习网站。
【解决方案2】:

好的,所以,这是我的代码,它正在工作......解释--> 我们知道在 int 变量中存储一个字符将存储 ASCII 值,a 的 ASCII 值是 97,b 是 98 等等....从每个字母的 ascii 值中减去 96 将得到您的数字想要--> 如果你仍然对 ascii 表感到困惑,那就去 google 查一下你就明白了

#include <iostream>
#include <string>
using namespace std;
int main(){
    string str ;
    cin >> str;
    int value = 0;
    for(int i=0 ; i<str.length() ; i++){
        int v = str[i] - 96;
        value += v;
    }
    cout << value;
    return 0;
}

【讨论】:

  • 那个“96”很难理解。你可以改写str[i] - 'a'。该字符常量具有正确的值。
  • @MSalters 是的,但是编号将从 0 而不是从 1 开始,他提出的问题从 1 开始编号
  • str[i] - 'a' + 1,还是没那么难。
  • @MSalters 是的,你也可以这样做,但我认为他无法理解这一点......
  • @NamrataMundhra IMO str[i] - 96 更加令人困惑。 str[i] - 'a' + 1 避免使用幻数。
【解决方案3】:

使用std::map&lt;char,int&gt;

int main(void)
{
   std::map<std::string,int> list;
   char letter = 'a';
   int val = 1;
   while(val <= 26)
   {
      list.insert(std::make_pair(letter,val));
      letter++;
      val++;
   }
}

【讨论】:

    【解决方案4】:

    您将 stringscharacters 的概念与变量名混淆了。

    // a is the variable name, this is information for the programmer
    int a = 1;
    
    // 'a' here is the actual letter a, things can actually be done with this in the program
    char theLetterA = 'a';
    

    将此概念与std::cin 结合起来,这样您就可以从用户那里读取数据,并且您正在努力解决这个问题。

    见:

    【讨论】:

      最近更新 更多