c++ string与int(其他的内部类型)转换

基于C++11 的 string 转换问题

如果你用的编译器是基于最新的C++11标准,那么string和其他类型转换问题就变的很简单,因为中已经封装好了对应的转换方法:

标准库中定义了to_string(val);可以将其它类型转换为string。

to_string这个函数还是很强大的!
string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val)

还定义了一组stoi(s,p,b)、stol(s,p,b)、stod(s,p,b)等转换函数,可以函数,可以分别转化成int、long、double等.
stoi(s,p,b);stol(s,p,b);stoul(s,p,b);stoll(s,p,b);stoull(s,p,b);返回s的起始子串(表示整数内容的字符串)的数值,返回值的类型分别为:int、long、unsigned long、long long、unsigned long long.其中b表示转换所用的基数,默认为10(表示十进制).p是size_t的指针,用来保存s中第一个非数值字符的下标,p默认为0,即函数不返回下标.
stof(s, p); stod(s, p); stold(s, p); 返回s的起始子串(表示浮点数内容)的数值,返回值的类型分别是float、double、long double.参数p的作用与整数转换函数中的一样。

非数字开头的会抛出std::invalid_argument异常。

int main()
{
    string a = "a123asd";
    uint32_t i = std::stoul( a );
    std::cout << i << std::endl;
    return 0;
}

数字开头的则会把数字部分转换.
p 表示转换的个数。

int main()
{
    string a = "123asd";
    size_t p;
    uint32_t i = std::stoull( a, &p );

    std::cout << "i=" << i << "  p=" << p << std::endl;
    return 0;
}

结果:
i=123 p=3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章