c++将带短划线的字符串转换为整数

c++ convert string with dashes to integer

本文关键字:字符串 转换 整数 c++      更新时间:2023-10-16

使用c++,如果我有一个字符串str="0-7637-2129-8",我如何将其转换为1个大整数?763721298字符串将始终采用该格式。更多示例:1-2344-3457-8=1234 4345780-0002-0020-0=200200

您可以使用擦除-删除习惯用法来删除所有'-'字符。

#include <iostream>
#include <string>
#include <algorithm>
int main() {
    std::string myStr = "0-7637-2129-8";
    myStr.erase(std::remove(myStr.begin(), myStr.end(), '-'), myStr.end());
    long myLong = std::atol(myStr.c_str());   // convert to long
    std::cout << "Your number is now " << myLong << std::endl;
    return 0;
}

工作示例

使用:

str.erase(std::remove(str.begin(), str.end(), '-'), str.end());

然后转换为long。

为了提供最模糊、最复杂的问题解决方案,我向大家展示了这段巧妙的代码

#include <locale>
#include <sstream>
...
struct dash_14 : std::numpunct<char>
{
  char do_thousands_sep() const { return '-'; }
  std::string do_grouping() const { return "14"; }
};
...
std::string str = "0-7637-2129-8";
std::stringstream ss(str);
ss.imbue(std::locale(ss.getloc(), new dash_14));
unsigned long long i;
ss >> i;

请注意,这不需要修改原始字符串:)

当然,这取决于你的字符串是否坚持特定的格式。