使用c ++,如果我有一个字符串str =“0-7637-2129-8”,我该如何将其转换为1个大整数? 763721298 字符串将始终采用该格式。更多例子: 1-2344-3457-8 = 1234434578 0-0002-0020-0 = 200200
答案 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;
}
答案 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;
请注意,这不需要修改原始字符串:)
当然,这取决于您的字符串是否符合特定格式。