C_C++ 字符串数字的转换

C++ 字符串流 stringstream

C++ stream library 中的 stringstream 允许我们使用流输入输出操作符 <<、 >> 进行数字和字符串转换,使用stringstream 工具需要包含头文件 #include

数字转化为字符串 示例

#include 
#include 

// MARK: - Main 入口
int main(int argc, char *argv[])
{
    // number to be converted to a string
    int number = 123;
    // string which will contain the result
    std::string result;
    // stream used for the conversion
    // 转换时只需要对流进行输出操作,因此可以使用(ostringstream)代替(stringstream)
    std::ostringstream convert;
    // insert the textual representation of 'number'
    // in the characters in the stream
    convert << number;
    // set 'result' to the contents of the stream
    result = convert.str();

    std::cout << result <

简化写法

#include 
#include 

// MARK: - Main 入口
int main(int argc, char *argv[])
{
    // number to be converted to a string
    int number = 123;
    // 构造一个未命名的stringstream对象,并将number输入到流中
    // 返回ostream的引用,结果在强制转换为ostringstream,
    // 在使用str()取流中的内容
    std::string result = static_cast( &(ostringstream() << number) )->str();
    std::cout << result <

字符串转化为数字 示例

#include 
#include 

// MARK: - Main 入口
int main(int argc, char *argv[])
{
    // string containing the number
    std::string text = "456";

    int result;
    // stringstream used for the conversion
    // constructed with the contents of 'text'
    std::istringstream convert(text);
    if ( !(convert >> result) )
        result = 0;
    std::cout << result <

简化写法

#include 
#include 

// MARK: - Main 入口
int main(int argc, char *argv[])
{
    string text = "456";
    int number;
    if ( ! (istringstream(text) >> number) ) number = 0;
    std::cout << number <

功能封装

接下来,为了更方便我们在编程中的使用,我们使用stringstream来封装一些简单的转换函数

// MARK: - T转化为字符串
template 
std::string number_to_string ( T number ) {
    std::ostringstream ss;
    ss << number;
    return ss.str();
}
// MARK: - 字符串转化为T
template 
T string_to_number ( const std::string &text ) {
    std::istringstream ss(text);
    T result;
    return ss >> result ? result : 0;
}
// MARK: - Main 入口
int main(int argc, char *argv[])
{
    float number = 123.456;
    std::string result = number_to_string(number);
    std::cout << result << std::endl;
    std::string text = "78.9";
    number = string_to_number(text);
    std::cout << number << std::endl;
    return 0;
}

C++2.0

到了C++11又引入了一些标准库函数,可以将基本的数据类型与字符串进行转换。

    函数 std::to_string() 将基本数字类型转换为字符串。
    函数 std::stoi()、std::stol()、std::stoll() 将字符串转换为整数类型。
    函数 std::stof()、std::stod()、std::stold() 将字符串转换为浮点值。

以上的这些方法声明在中。

#include 
#include 

// MARK: - Main 入口
int main(int argc, char *argv[])
{
    float number = 123.456;
    std::string result = std::to_string(number);
    std::cout << result << std::endl;
    std::string text = "78.9";
    number = std::stof(text);
    std::cout << number << std::endl;
    return 0;
}

C 标准输出

C语言中没有流库, 我们可以使用sprintf对数据进行格式化。

数字转化为字符串 示例

int main(int argc, char *argv[])
{
    // number to be converted to a string
    int number = 123;
    // string which will contain the result
    char result[32];
    sprintf ( result, "%d", number );
    std::cout << result <

字符串转化为数字 示例

int main(int argc, char *argv[])
{
    // number to be converted to a string
    int number = 0;
    // string which will contain the result
    char text[] = "1234";
    int succeeded = sscanf ( text, "%d", &number );
    if(succeeded== EOF) number = 0;
    std::cout << number <

使用C的标准库

  • itoa
  • atoi
  • atol
  • atof
  • strtol
  • strtoul
  • strtod

你可能感兴趣的:(C_C++ 字符串数字的转换)