【问题标题】:C++ String to int valuesC++ 字符串到 int 值
【发布时间】:2012-11-26 18:01:18
【问题描述】:

在问这个之前我一直在到处搜索,但没有找到任何东西。 在我的 Schaums Programming with C++ 书中没有提到我正在从中自学...

使用 C++ 如何转换字符串,例如 "0:03:22" to 3 separate int values of0, 03and22`?假设它可能。

【问题讨论】:

标签: c++ string time


【解决方案1】:

您首先将字符串解析为 3 个标记,然后使用 std stringstream 或 boost lexical_cast 将标记转换为整数。

【讨论】:

    【解决方案2】:

    就个人而言,我会在 ':' 上使用 boost::split,获取字符串向量,然后对它们运行 boost::lexical_cast。我确实相信有一个更现代的转换库可能会取代 lexical_cast 但你必须自己寻找它。拆分在字符串算法库中。

    它会比一些替代品慢,但除非有理由超快,否则它会很容易创建和修改,所以它会胜出。

    【讨论】:

      【解决方案3】:

      类似

      std::string str="0:03:22";
      std::istringstream ss(str);
      int hours,mins,seconds;
      char skip;
      if(ss >> hours >> skip >> mins >> skip >> seconds) {
          //success
      }
      

      这里我们创建了一个流,我们可以从中提取每个元素。

      参考

      http://en.cppreference.com/w/cpp/io/basic_stringstream

      【讨论】:

      • +1 用于简单的标准 C++ 解决方案(我懒得打字了)
      【解决方案4】:

      使用sscanf。它还返回转换的值的数量:

          char* input = "0:03:22";
          int a, b, c;
          if (sscanf(input, "%d:%d:%d", &a, &b, &c) == 3)
          {
              printf("Three values converted: %u, %u, %u\n", a, b, c);
          }
      

      【讨论】:

      • 如果你打算走C路线,至少使用const char*
      • 您可以采用的最 const 方式是 const char * const,虽然从技术上讲,这是您应该用于指向常量数据的常量指针的类型,但很少有人会为这么多 const 烦恼。
      • @111111,你能告诉我为什么这很重要吗?
      【解决方案5】:

      简单的格式化提取应该可以解决问题:

      #include <sstream>
      
      std::istringstream iss("0:03:22");
      
      int a, b, c;
      char d1, d2;
      
      if (iss >> a >> d1 >> b >> d2 >> c >> std::ws &&
          iss.get() == EOF && d1 == ':' && d2 == ':')
      {
          // use a, b, c
      }
      else
      {
          // error!
      }
      

      确保包含条件检查:如果输入操作成功,您只能读取abc

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-11-22
        • 1970-01-01
        • 2017-03-08
        • 1970-01-01
        • 2013-09-14
        • 2012-05-04
        • 1970-01-01
        相关资源
        最近更新 更多