【问题标题】:C++ Can I assign an int by using string::at?C++ 我可以使用 string::at 分配一个 int 吗?
【发布时间】:2023-03-20 02:35:01
【问题描述】:

在我的代码中我有这个:

int enemyNumber = numberType.at(0);

numberType 是一个字符串。

string numberType 中的第一个字符是“1”。但是int enemyNumber 在分配之后变成了 48。

发生了什么,如何让enemyNumber 变为“1”?

【问题讨论】:

  • 我希望你不打算拥有超过 9 个敌人。
  • 哈哈,我预见到了这个问题。

标签: c++ string int variable-assignment


【解决方案1】:

这是因为 48 是1 的字符代码。要获取整数值,请推断 '0',即编写如下内容:int enemyNumber = numberType.at(0) - '0';。这样就得到'1'的字符代码减去'0'的字符代码即1。这适用于所有数字,因为它们的字符代码是连续数字。

【讨论】:

    【解决方案2】:

    要将值从'0''9' 的单个字符转换为相应的数字,请减去'0' 的值:

    int enemyNumber = numberType.at(0) - '0';
    

    如果您想转换包含多个数字的字符串,标准库可以提供帮助:

    // C++11 or later
    int n = std::stoi(s);
    
    // Historically
    int n = std::atoi(s.c_str());  // no error checking
    
    std::istringstream ss(s);
    if (ss >> n) {
         // success
    }
    

    【讨论】:

      【解决方案3】:

      如果您想留在字符串对象中,可以执行以下操作:

      #include <string>
      #include <iostream>
      
      int main()
      {
          std::string numberType("1234");
          const int enemyNumber = std::stoi( numberType.substr(0,1) );
      
          std::cout << enemyNumber;
          return 0;
      }
      

      stoi() 会为你完成从 string 到 int 的转换。

      【讨论】:

      • 如您所见,有很多方法可以做非常相似的事情,所以最后,您的解决方案取决于个人品味。
      猜你喜欢
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      • 2015-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多