“35.28”存储为char*
。我需要把它变成一个整数(35280)。
我想避免花车。我怎么能这样做?
答案 0 :(得分:4)
最小基本代码:
std::string s = "35.28";
s.erase(std::remove(s.begin(), s.end(), '.'), s.end()); //removing the dot
std::stringstream ss(s);
int value;
ss >> value;
value *= 10;
std::cout << value;
输出:
35280
这是基本的想法。您可以使用上面的代码使其更加灵活,以便它也可以用于其他数字。
编辑:
这是一个灵活的解决方案:
int Convert(std::string s, int multiplier)
{
size_t pos = s.find('.');
if ( pos != std::string::npos)
{
pos = s.size() - (pos+1);
s.erase(std::remove(s.begin(), s.end(), '.'), s.end());
while(pos) { multiplier /= 10; pos--; }
}
else
multiplier = 1;
std::stringstream ss(s);
int value;
ss >> value;
return value * multiplier;
}
测试代码:
int main() {
std::cout << Convert("35.28", 1000) << std::endl; //35.28 -> 35280
std::cout << Convert("3.28", 1000) << std::endl; //3.28 -> 3280
std::cout << Convert("352.8", 1000) << std::endl; //352.8 -> 352800
std::cout << Convert("35.20", 1000) << std::endl; //35.20 -> 35200
std::cout << Convert("3528", 1000) << std::endl; //no change
return 0;
}
输出:
35280
3280
352800
35200
3528
答案 1 :(得分:2)
从字符串中删除dot char并将其直接转换为int
答案 2 :(得分:1)
您的意思是存储为字符串(char*
)吗?然后你可以创建自己的解析器:
int flstrtoint(const char *str) {
int r = 0;
int i = strlen(str) - 1;
while (i >= 0) {
if (isdigit(str[i])) {
r *= 10
r += str[i] - `0`;
}
i--;
}
return r;
}
flstrtoint("35.28"); // should return 3528
答案 3 :(得分:0)
答案 4 :(得分:0)
作为Als sais,使用atoi,但有一个扭曲,剥去句点的字符串并使用atoi将结果转换为int。