c ++将带有破折号的字符串转换为整数

时间:2014-10-16 22:27:55

标签: c++ string integer

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

3 个答案:

答案 0 :(得分:4)

您可以使用erase-remove idiom删除所有'-'个字符。

#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;
}

Working example

答案 1 :(得分:2)

使用:

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

然后转换为long。

答案 2 :(得分:2)

在一个迟来的尝试中,为这个问题提供最混淆和最复杂的解决方案,我用这个巧妙的代码向你们展示

#include <locale>
#include <sstream>

...

struct dash_14 : std::numpunct<char>
{
  char do_thousands_sep() const { return '-'; }
  std::string do_grouping() const { return "\1\4"; }
};

...

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;

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

当然,这取决于您的字符串是否符合特定格式。